【发布时间】:2016-05-03 05:41:03
【问题描述】:
我有一个代码可以将 txt 文件的内容反向打印为字符串。İ 使用 malloc() 函数将我的字符串的每个字符存储在 txt 文件中。它可以正常工作,但它会打印 with 的内容前面一个'\0'是什么原因?
void veriyitersyazdir(FILE *file)
{
char metin; // that gets the every single char of my string
int boyutsayac=0; // that stores my string's size
char *metinarr=NULL; // that is my malloc() array pointer
int dongusayac; // that is a counter variable that is used to print my string reversely.
system("cls");
file = fopen("C:\\metin.txt", "r");
do {
metin = fgetc(file);
if (metin==EOF) {
break;
}
boyutsayac++;
} while (1);
metinarr = (char *) malloc(sizeof(char)*boyutsayac);
fseek( file, 0, SEEK_SET);
for (dongusayac = 0; dongusayac < boyutsayac; dongusayac++) {
metin = fgetc(file);
metinarr[dongusayac]= metin;
}
fseek( file, 0 , SEEK_SET);
for (; dongusayac >=0; dongusayac--) {
printf("%c", metinarr[dongusayac]);
}
fclose(file);
}
txt文件内容:Mustafa Mutlu
代码的输出:UltuM afatsuM
【问题讨论】:
-
for (; dongusayac >=0; dongusayac--):dongusayac以更大的值开头。 -
metin = fgetc(file);wheremetinis a char 是完全错误的。见stackoverflow.com/questions/35356322/…。fgetc返回一个 int,您应该遵守该合同,因为 char 可能不能代表 EOF(在 char 未签名的系统上)。在带有签名字符的系统上它仍然是错误的,只是有点不同。 -
这就是为什么你应该总是用英文编写源代码的原因。因为你最终可能需要帮助。