gpt4 book ai didi

c - 如何将char数组复制到C中的双指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:26 25 4
gpt4 key购买 nike

我正在编写一个相当简单的程序来逐行读取文件并将其存储到行数组中,我的程序编译正常但每次运行时都会崩溃。这是我的代码:

#include <stdio.h> 
#include <string.h>
#define LINESIZE 512

typedef struct {
char **data;
size_t nused;
} lines_t;

lines_t readlines(FILE *fp);

int main(int argc,char* argv[]) {
FILE *fp;
(void)argc;
if((fp = fopen(argv[1],"r+")) == 0) {
perror("fopen");
}
readlines(fp);
return 0;
}

lines_t readlines(FILE *fp) {
lines_t line_data;
char line[LINESIZE];
char temp[20];
int num_lines = 0;
(*line_data.data) = (char *)malloc(LINESIZE);
while(fgets(line,LINESIZE,fp)) {
sscanf(line,"%s\n",temp);
strcpy(line_data.data[num_lines], temp); /* Program crashes here */
num_lines++;
}
return line_data;
}

我尝试复制我的数组的那一行给我带来了麻烦,所以我的问题是,如何将我的字符数组 temp 复制到 char **datastruct lines_t 里面,如果我做的不对?

最佳答案

你在这里取消引用了一个无效的指针:

(*line_data.data) = (char *)malloc(15); 

line_data.data 是一个 char **。您正在尝试尊重它,但它尚未设置为任何有意义的值。在为 *line_data.data 分配内存之前,您需要为 line_data.data 分配内存。

(char *)malloc(15) 也特别可疑。 15 从何而来,您实际分配内存的目的是什么?转换 malloc 的结果通常被认为是不好的做法,在您的情况下,这是正确的,因为 malloc 是在 stdlib.h 中声明的,而您不包括该 header 。如果要分配足够的空间来容纳 15 个 char *,请使用 malloc(15 * sizeof(char *))malloc(15 * sizeof (*line_data.data)) (这里使用 *line_data.data 是安全的,即使它没有指向任何东西,因为 sizeof 没有评估其操作数)。

关于c - 如何将char数组复制到C中的双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com