【发布时间】:2017-11-28 13:43:47
【问题描述】:
我收到以下错误:
进程结束,退出代码-1073741819 (0xC0000005)
我正在尝试遍历 char 数组中的每个字符并添加到另一个 char 数组中,这是我的代码:
c_data_ptr 下面是一个字符串:
id,hotel_name,resort_name,destination_name 1、我的酒店、度假村、目的地
void get_collection_headers(char *c_data_ptr) {
printf("[INFO] Getting headers for this collection.\n");
// Set char array of char array for headers
char headers[SYS_MXL_HEADERS][SYS_MXL_HEADER_NAME] = {"\0"};
// Current working "header name"
char *header_name;
header_name = (char*)calloc(0,SYS_MXL_HEADER_NAME * sizeof(char) + 1);
if(header_name != NULL) {
// Iterate over the data to get the first line only
for (char c = *c_data_ptr; c; c=*++c_data_ptr) {
// Check for a newline
if (c == '\n') {
//free(header_name);
printf("ENDOFLINE\n");
break;
}
if(c != '\0') {
printf("%c", c);
}
// Char = ,
if (c == ',') {
memset(header_name,0,SYS_MXL_HEADER_NAME * sizeof(char) + 1);
} else {
// Add character to header name
strcat(header_name, &c);
printf("-> HeaderName: %s\n", header_name);
}
}
} else {
printf("[INFO] Failed to allocate memory.");
}
}
【问题讨论】:
-
我认为你需要read more about the
callocfunction。你没有正确使用它。 -
它应该是
realloc(NULL, SYS_MXL_HEADER_NAME * sizeof(char) + 1);,但这也没有多大意义。 -
@Someprogrammerdude 我是 C 的新手,正在努力学习它并来自 PHP 背景 :)
-
@SouravGhosh 以这种方式使用
realloc是有道理的,因为它与普通的malloc调用相同。我见过几次这样的,但它主要用于在循环中重新分配时使用,并且将被重新分配的指针初始化为空指针。 -
= {"\0"};是指= {'\0'};吗?另请注意,sizeof(char)定义为 1。
标签: c arrays memory-management char