C添加数组一个字

问题描述 投票:0回答:1
#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文件并将每个单词添加到数组中{“多好的一天啊”}

c arrays string
1个回答
2
投票

您必须采取以下几个步骤:

要从文件中读取可能无限数量的单词,您必须拥有一个可以容纳足够单词的数组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);

就这样...


what you did wrong and needs noticing:
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)
© www.soinside.com 2019 - 2024. All rights reserved.