当我使用getc时程序正在运行,但不适用于此代码。 我尝试在while循环内打印随机文本,但该文本打印为NULL。
void main()
{
FILE *fp;
char *str=NULL;
char s;
fp=fopen("text.txt","r");
if(fp==NULL)
{
printf("\nCAN NOT OPEN FILE");
exit(EXIT_FAILURE);
}
while(fscanf(fp,"%s",str)!=EOF)
{
printf("%s",str); //not taking any values in str,prints NULL
}
fclose(fp);
}
答案 0 :(得分:0)
这里
char *str=NULL;
str
是一个指针变量,它用NULL
初始化,这很好,但是可以将某些内容存储到str
中,即从文件中读取单词,然后存储到str
中它应该有有效的内存。因此,要么为str
str = malloc(SIZE); /* define SIZE */
或使用字符数组,如
char str[100]; /* let say each word of file is less than 100 char's */
例如
char str[100];
while(fscanf(fp,"%s",str)!=EOF) {
printf("%s",str);
}
也可以使用
代替void main() { }
int main(void) {
/* some_code */
return 0;
}
从C Standard 5.1.2.2.1 程序启动中可以看到。
答案 1 :(得分:0)
问题出在以下语句上:
char *str=NULL;
由于您使用fscanf
来读取作为字符数组的单词,因此必须将它们读入有效的存储位置。因此,str
应该是一个char
数组,其长度应等于文件中最长的单词加上1(用于空终止)。
因此将以上内容更改为:
char str[256];
7.21.6.2 fscanf函数
...12转换说明符及其含义是:
s-匹配非空格字符序列。 如果没有l长度修饰符,则相应的参数应为 指向足够大的字符数组的初始元素的指针,可以接受 序列和一个终止的空字符,该字符将自动添加。