繁体   English   中英

如何在 C 中使用 scanf 动态创建字符串数组

[英]How do I dynamically create an array of strings using scanf in C

所以我一直在搜索堆栈溢出一个多小时,我不明白为什么这个函数给我一个分段错误。 我想创建一个字符串数组,通过scanf扫描字符串,动态改变每个字符串的大小并返回字符串数组。 任何人都可以帮忙吗? 谢谢你。

char** readScores(int* count) {
    int c = 0;
    char** arr =(char**)malloc(100 * sizeof(char*));
    char* in;
    while(scanf("%s", in) != EOF) {
        arr[c] = (char*)malloc(strlen(in)+1);
        strcpy(arr[c], in);
    }
    *count = c;
    return arr;
}
char* in;
while(scanf("%s", in) != EOF) {

这告诉计算机从标准输入读取到in指向的char缓冲区。

哪个不存在,因为in没有初始化为任何东西(更不用说有效的缓冲区了)。

我不会只使用 scanf fgets。

您需要为arrarr元素引用的每一行分配内存

char** readScores(size_t *count) {
    size_t lines = 0;
    char** arr = NULL, **tmp;
    char* in = malloc(MAXLINE), *result;
    size_t len;

    if(in)
    {
        do{
            result = fgets(in, MAXLINE, stdin);           
            if(result)
            {
                len = strlen(in);
                tmp = realloc(arr, sizeof(*tmp) * (lines + 1));
                if(tmp)
                {
                    arr = tmp;
                    len = strlen(in);
                    arr[lines] = malloc(len + (len == 0));
                    if(arr[lines])
                    {
                        if(len) memcpy(arr[lines], in, len - 1);
                        arr[lines++][len] = 0;
                    }
                    else
                    {
                        // error handling     
                    }
                }
                else
                {
                    // error handling 
                }
            }
        }while(result);
        free(in);
    }
    *count = lines;
    return arr;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM