【发布时间】:2022-01-10 03:49:57
【问题描述】:
我有文件 statistics.txt 以下数据在哪里:
Mark = 100
Andy = 200
然后,我写了这段代码:
FILE *file_statistics_reading = fopen("statistics.txt", "r");
char line[1024];
int n = 0;
char player[10];
while (fgets(line, sizeof(line), file_statistics_reading) != NULL) {
n = 0;
for (int i = 0; i < 10; i++) {
if ((line[i] > 'A') && (line[i] < 'z')) {
player[n] = line[i];
n = n + 1;
}
}
printf("%s", player);
}
fclose(file_statistics_reading);
我想从文本文件中提取球员的名字并打印出来,但是输出是这样的:
Mark╠╠╠╠╠╠╠╠╠╠╠╠╠
Andy╠╠╠╠╠╠╠╠╠╠╠╠╠
有什么解决办法吗?
【问题讨论】:
-
您需要 NUL 终止数组以使其成为有效字符串。
player[n] = '\0';在printf之前。当然你也应该增加player的大小,以确保它总是能适应NUL。 -
@kaylum 谢谢!
-
C 中的字符串不仅仅是字符数组,它们是以空字符结尾的字符数组。当您让编译器通过在源代码中提及它来为您构造一个字符串时,它会为您附加空字符。当您让大多数 C 函数为您创建字符串时(例如
fgets或scanf和%s),它们会为您添加空字符。但是,当您自己构建一个字符串时,一次一个字符,就像您在这里所做的那样,您有责任自己添加空字符。