如何解决我将如何动态附加一个二维字符数组?
这段代码引发了分段错误,我并不完全是我做错的地方。一旦我输入一个字符串,它就会导致分段错误。我期待它在 char 数组的新元素中附加一个新字符串。
#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,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 *)
您需要为 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。