Я отладил функцию, и она работает. Так что да, самообучение C, кажется, идет хорошо. Но я хочу сделать его лучше. То есть он читает такой файл:
want
to
program
better
И помещает каждую отдельную строку строки в массив строк. Однако вещи становятся странными, когда я что-то распечатываю. Насколько я читал, strcpy() должен просто копировать строку до символа \0. Если это правда, то почему следующая печать строки нужна и \n? Это похоже на то, что strcpy() также скопировал \n и завис там. Я хочу избавиться от этого.
Мой код для копирования файла ниже. Я не включил всю программу, потому что не верю, что это имеет отношение к происходящему. Я знаю, что проблема здесь.
void readFile(char *array[5049])
{
char line[256]; //This is to to grab each string in the file and put it in a line.
int z = 0; //Indice for the array
FILE *file;
file = fopen("words.txt","r");
//Check to make sure file can open
if(file == NULL)
{
printf("Error: File does not open.");
exit(1);
}
//Otherwise, read file into array
else
{
while(!feof(file))//The file will loop until end of file
{
if((fgets(line,256,file))!= NULL)//If the line isn't empty
{
array[z] = malloc(strlen(line) + 1);
strcpy(array[z],line);
z++;
}
}
}
fclose(file);
}
Итак, теперь, когда я делаю следующее:
int randomNum = rand() % 5049 + 1;
char *ranWord = words[randomNum];
int size = strlen(ranWord) - 1;
printf("%s",ranWord);
printf("%d\n",size);
int i;
for(i = 0; i < size; i++)
{
printf("%c\n", ranWord[i]);
}
Он распечатывает:
these
6
t
h
e
s
e
Разве он не должен распечатать следующее?
these6
t
h
e
s
e
Итак, единственное, что я могу понять, это то, что когда я помещаю строки в массив, он также помещает туда \n. Как я могу избавиться от этого?
Как всегда, с уважением. ГикиОмега
\n
==\0
, если нет, то копируем. Простой. Если вы хотите избежать этого, напишите свой собственныйstrcpy()
. Или манипулируйте позицией символа '\0', если символы новой строки всегда находятся в конце. - person jn1kk   schedule 31.07.2012