Итак, у меня есть этот код:
char inte[10];
while(j<noinput) {
fscanf(circuit,"%s",inte);
vararray[count]=inte;
count++;
j++;
}
Однако, когда я печатаю содержимое массива следующим образом:
for (h=0;h<noinput+2;h++){
printf("%dth variable: %s\n",h,vararray[h]);
}
Элементы за первыми двумя (которые зарезервированы для специальных элементов) все равны ПОСЛЕДНЕЙ строке, которую я взял из fscanf ранее. Я понятия не имею, как одна из строк из fscanf может быть равна нескольким слотам в массиве, когда я только устанавливаю
vararray[count]=inte;
Разве это не должно означать, что каждый элемент массива будет отличаться, поскольку я каждый раз увеличиваю счетчик? Я так растерялся. Я также пробовал делать:
fscanf(circuit,"%s",vararray[count]);
Но это тоже не сработало и дало мне нулевые элементы для определенных индексов.
Без предоставления содержимого файла на вопрос нельзя ответить. Пожалуйста, предоставьте входные данные, с которыми вы пробовали код.
Я просто проверил это на файле, содержащем "a b c"
Пожалуйста, предоставьте весь код.
Весь код не нужен; пока это не минимальный воспроизводимый пример, но довольно близко. Но, @ madmax007, ваше объявление vararray было бы полезно.





Вы не копируете строку. Вот что происходит:
char *vararray[462]; // declare an array of string pointers
char inte[10]; // declare a char array (to function as a string)
for (int i = 0; i < 462; i += 1) {
// do something
vararray[i] = inte;
}
Это приводит к тому, что все элементы vararray указывают на память, также называемую inte ... но вы каждый раз ее перезаписываете! Вместо этого сделайте что-нибудь вроде этого:
#include <string.h> // write me at the top, outside main()!
char vararray[462][10]; // declare an array of strings (max length 9)
char inte[10]; // declare a char array (to function as a string)
for (int i = 0; i < 462; i += 1) {
fscanf(circuit,"%10s",inte); // use buffer size to make xscanf safer
strncpy(vararray[i], inte, 9); // copy inte, making sure not to buffer overflow!
vararray[i][9] = '\0'; // if inte is too big, a null byte won't be added to the end of the string; make sure that it's there
}
Это копирует строку! Когда вы это сделаете, ваша проблема должна исчезнуть.
вы делаете что-то слишком неправильно. По "vararray [count] = inte;" вы выполняете присвоение указателя, поэтому весь ваш vararray заполняется одной и той же строкой. Я предполагаю, что вы новичок в C, поэтому я отвечу по этому поводу. Правильный способ будет выглядеть примерно так, как показано ниже
Решение фиксированного размера:
char vararray[ROWCOUNT][BUFFERSIZE];
for(count=0; j<noinput; ++count, ++j) {
fscanf(circuit,"%s",(char*)vararray[count]);
}
С динамическим управлением памятью
char * vararray[ROWCOUNT];
for(count=0; j<noinput; ++count, ++j) {
vararray[count] = (char*)malloc(BUFSIZE);
fscanf(circuit,"%s", vararray[count]);
}
Я хочу предупредить вас, что в настоящее время стать экспертом по C - это своего рода безумие, я имею в виду, если у вас нет другого выбора. Примеры ниже, которые я привожу, а то, что вы написали, совершенно небезопасно и небезопасно ...
Все ли строки в файле одинаковой длины?