将用户输入的字符串存储到c中的字符串数组中?

时间:2019-03-09 05:37:12

标签: c

我是C语言的新手,我正尝试使用bash间接读取一个包含多个单词的文件,并将这些单词放入字符串数组中。文件末尾带有-1标记。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void init(char* words[]);

int main(int argc,char *argv[]){
    char* words[400000];
    init(words);
    int i = 0;
    do{
        printf("%s",words[i]);
        i++;
    }while(!strcmp(words[i],"-1"));
}
void init(char* words[]){ // initializes array
    int i = 0;
    do{
        fgets(words[i],1024,stdin);
        i++;
    }while(!strcmp(words[i],"-1"));
}

这给我带来了细分错误,如果需要任何其他信息,我很乐意提供。

1 个答案:

答案 0 :(得分:0)

如果我猜对了,“ 400000”表示用户可以输入的最大行数。但是Windows操作系统上的默认堆栈大小为1M,sizeof(void *)* 400000 = 1,600,000 ...

另一件事是您没有为每一行分配内存。

因此,我尝试像这样更正您的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LINE 4000  // '400000' is really too big!

void init(char* words[]);

int main(int argc,char *argv[]){
    char* words[MAX_LINE];
    memset(words, 0 , sizeof(words));
    init(words);
    int i = 0;
    do{
        printf("%s",words[i]);
        delete words[i];
        words[i] = nullptr;
        i++;
    }while(!strcmp(words[i],"-1"));
}
void init(char* words[]){ // initializes array
    int maxLen = 1024;
    int i = 0;
    do{
        words[i] = new char[maxLen];
        memset(words[i], 0, maxLen);
        fgets(words[i], maxLen, stdin);
        i++;
    }while(!strcmp(words[i],"-1") && i < MAX_LINE);
}