从文件填充数组

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.txtmsg 会是 12345 吗?

Strcat 可能不是您想要使用的。它假定您附加的字符串是空终止的,您没有保证。此外,此代码将失败,因为您没有为 msg 分配任何 space。此外,我有点怀疑 msg 是使用 [] 指向指针的指针。我建议查看 fgets 函数的示例,而不是您正在做的事情。

你没有为 char 数组分配 space 而且它的类型与 strcat() 的第一个参数不兼容你还需要 nul 终止数组所以这是一个有效的字符串,所以

  1. 重新声明msg
  2. 为字符串分配 space。
  3. nul 终止数组。
  4. fgetc() returns int 不是 char.
  5. 在这种情况下你真的不需要使用 break,而且几乎不需要。
  6. 你也不需要strcat()
  7. 检查 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 这样的硬编码值).