繁体   English   中英

我将如何动态 append 二维字符数组?

[英]How would I append a 2D array of char dynamically?

这段代码引发了分段错误,我并不完全是我做错的地方。 一旦我输入一个字符串,它就会导致分段错误。 我期待它在 char 数组的新元素中 append 一个新字符串。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char** append(char** b, size_t* size, char target[]);
int main(){
    size_t size = 1;
    char** b = malloc(sizeof(char)*size);
    while(1){
      char input[100] = "";
      scanf("%99s", input);
      if (strcmp(input, "end") == 0)
          break;
      b = append(b, &size, input);
    }
    for(int i = 0; i < size; i++)
        printf("%s ", b[i]);
    return 0;
}
char** append(char** arr, size_t* size, char target[]){
    *size += 1;
    size_t b = *size;
    char** new_arr = realloc(arr, b * sizeof(char));
    strcpy(new_arr[b - 1], target);
    return new_arr;
}

保持你的逻辑有最后一个空元素。 你想要一个char *数组,所以你需要分配size * sizeof(char *)

您需要 memory 用于 scanf 并检查返回值然后您需要复制扫描字符串,例如使用strdup

清单可能更适合您的情况

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char** append(char** b, size_t* size, const char* target);
int main(){
    size_t size = 1;
    char** b = malloc(sizeof(char*)*size);
    while(1){
      char input[256];
      int res = scanf("%s", input);
      if (res == EOF || strcmp(input, "end") == 0)
          break;
      b = append(b, &size, input);
    }
    for(int i = 0; i < size; i++)
        printf("%s ", b[i]);
    printf("\n");
    return 0;
}
char** append(char** arr, size_t* _size, const char* target){
    size_t size = *_size;
    arr[size - 1] = strdup(target);
    size++;
    char** new_arr = realloc(arr, size * sizeof(char *));
    *_size = size;
    return new_arr;
}

暂无
暂无

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

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