我有一个文件,其中包含一组我希望存储在数组中的字符,并且想知道C&#39 {s} strcat()
函数是否可以完成这项工作。
那么,以下是从文件中获取字符的有效方法吗?
FIlE *file = fopen(argv[1], "r");
char ch, *msg[];
while(1)
{
if(feof(file))
{
break;
}
ch = fgetc(file);
strcat(msg,ch);
}
printf("%s", msg);
如果我的文件example.txt
包含12345
,那么msg
会12345
吗?
答案 0 :(得分:2)
您没有为char
数组分配空间,而且它的类型与strcat()
的第一个参数不兼容,您还需要nul
终止数组,因此它是一个有效的字符串,所以
msg
nul
终止数组。fgetc()
返回int
而不是char
。break
,而且几乎不需要。strcat()
fopen()
是否未返回NULL
这就是你应该这样做的方式
int ch, count;
char msg[100];
FIlE *file = fopen(argv[1], "r");
if (file == NULL)
return -1;
count = 0
while (((ch = fgetc(file)) != EOF) && (count < sizeof(msg) - 1))
msg[count++] = (char)ch;
msg[count] = '\0';
printf("%s", msg);
另请注意
while (1)
{
if (condition)
break;
}
真的是
while (condition)
{
}
但有一个额外的风险,你可以在评估之前更改condition
,并使代码很难理解。
答案 1 :(得分:2)
你应该只使用fgets()。但是要小心,你需要知道你正在读入的数组的大小 - 否则你最终可能会遇到一些讨厌的BufferOverflow错误。
char msg[100];
FIlE *file = fopen(argv[1], "r");
if (file == NULL)
return -1;
if( fgets (msg, 100, file)!=NULL ) {
printf ("%s\n", msg);
}
fclose(fp);
更好的方法是找到您正在读取的文件的大小,使用具有该大小的malloc动态分配msg数组,然后从文件中读取许多字符(而不是像100这样的硬编码值)。
答案 2 :(得分:0)
Strcat可能不是您想要使用的。它假定您要附加的字符串为空终止,您不保证。此外,此代码将失败,因为您没有为msg分配任何空间。另外我有点怀疑msg是使用[]指针的指针。我建议看看fgets功能的例子,而不是你正在做的事情。