从文件填充数组
Fill Array From File
我有一个文件,其中包含我想存储在数组中的一组字符,我想知道 C 的 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);
如果我有一个包含 12345
的文件 example.txt
,msg
会是 12345
吗?
Strcat 可能不是您想要使用的。它假定您附加的字符串是空终止的,您没有保证。此外,此代码将失败,因为您没有为 msg 分配任何 space。此外,我有点怀疑 msg 是使用 [] 指向指针的指针。我建议查看 fgets 函数的示例,而不是您正在做的事情。
你没有为 char
数组分配 space 而且它的类型与 strcat()
的第一个参数不兼容你还需要 nul
终止数组所以这是一个有效的字符串,所以
- 重新声明
msg
- 为字符串分配 space。
nul
终止数组。
fgetc()
returns int
不是 char
.
- 在这种情况下你真的不需要使用
break
,而且几乎不需要。
- 你也不需要
strcat()
- 检查
fopen()
没有 return 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] = '[=10=]';
printf("%s", msg);
另请注意
while (1)
{
if (condition)
break;
}
真的
while (condition)
{
}
但是有额外的风险,您可以在评估它之前更改 condition
,并且还会使代码很难理解。
您应该只使用 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 这样的硬编码值).
我有一个文件,其中包含我想存储在数组中的一组字符,我想知道 C 的 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);
如果我有一个包含 12345
的文件 example.txt
,msg
会是 12345
吗?
Strcat 可能不是您想要使用的。它假定您附加的字符串是空终止的,您没有保证。此外,此代码将失败,因为您没有为 msg 分配任何 space。此外,我有点怀疑 msg 是使用 [] 指向指针的指针。我建议查看 fgets 函数的示例,而不是您正在做的事情。
你没有为 char
数组分配 space 而且它的类型与 strcat()
的第一个参数不兼容你还需要 nul
终止数组所以这是一个有效的字符串,所以
- 重新声明
msg
- 为字符串分配 space。
nul
终止数组。fgetc()
returnsint
不是char
.- 在这种情况下你真的不需要使用
break
,而且几乎不需要。 - 你也不需要
strcat()
- 检查
fopen()
没有 returnNULL
你应该这样做
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] = '[=10=]';
printf("%s", msg);
另请注意
while (1)
{
if (condition)
break;
}
真的
while (condition)
{
}
但是有额外的风险,您可以在评估它之前更改 condition
,并且还会使代码很难理解。
您应该只使用 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 这样的硬编码值).