#include <stdio.h>
int main()
{
char in_name[80];
FILE *in_file;
char word[50];
char word2[50];
char word3[50];
char *strs[]= {"foo ABAA", "bar", "bletch","4"};
strcpy(*strs[4],"wow");
in_file = fopen("test2.txt", "r");
if (in_file == NULL)
printf("Can't open %s for reading.\n", in_file);
else
{
while (fscanf(in_file, "%s %s %s ", word,word2,word3) != EOF)
{
printf("%s ", word);
printf("%s ", word2);
printf("%s\n", word3);
}
fclose(in_file);
}
printf("%s",strs[3]);
int result = atoi(strs[3] );
printf("\n");
printf("%d",result);
return 0;
}
我是C.Im的新手,试图将“woo”字符串添加到strs数组。但是它给出了一个错误。我可以打开任何帮助。我的主要观点是逐行读取一个txt文件并将每个单词添加到数组中{“多好的一天啊”}
您必须采取以下几个步骤:
要从文件中读取可能无限数量的单词,您必须拥有一个可以容纳足够单词的数组strs
。比方说50:
char *strs[50]= 0;
但这是一个指向字符串的数组;指针仍指向无处。所以你必须有内存来存储读取的字符串。我们将在每个单词读取后分配内存。
您打开文件并开始阅读。对于每个读取的单词,您分配内存并将其存储在strs
数组中。然后将该单词复制到刚刚分配的内存中:
int i= 0;
while (fscanf(in_file, "%s %s %s ", word,word2,word3) != EOF)
{
strs[i]= malloc(strlen(word )+1; strcpy(strs[i],word ); i++;
strs[i]= malloc(strlen(word2)+1; strcpy(strs[i],word2); i++;
strs[i]= malloc(strlen(word3)+1; strcpy(strs[i],word3); i++;
}
fclose(in_file);
就这样...
char *strs[]= {"foo ABAA", "bar", "bletch","4"};
这是一个使用{
和}
之间的值初始化的数组。您没有指定大小,并且通过计算{
和}
之间的初始值设定项的数量来确定大小。
使用文字字符串初始化数组。这些是常量,无法修改。所以当你这样做时:
strcpy(*strs[4],"wow");
你做了4件事:1)第4条超出你的阵列; 2)你取消引用一个指针(strs[4]
已经是一个指针,所以不需要*
),即使我们忘记了这个最后一个错误,你也可以尝试3)覆盖只读字符串,这是不允许的。最后,4)您尝试复制的字符串比那里的字符串长得多,因此即使字符串不是只读字符串,也会出错。
while (fscanf(in_file, "%s %s %s ", word,word2,word3) != EOF)
使用scanf
并没有真正错误,但最好将结果与您想要阅读的项目数进行比较。 3在这里。此外,我们仍然必须防止阅读太多的话:
while (i<47 && fscanf(in_file, "%s %s %s ", word,word2,word3)==3)