我收到以下错误:
进程已完成,退出代码-1073741819 (0xC0000005)
我试图循环遍历字符数组中的每个字符并添加到另一个字符数组,这是我的代码:
下面的c_data_ptr
是以下字符串:
id、酒店名称、度假村名称、目的地名称 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.");
}
}
最佳答案
感谢您的帮助,我想我已经解决了这个问题,我没有再收到错误,有人可以验证我下面的代码吗?
HeaderStruct *get_collection_headers(char *c_data_ptr){
printf("[INFO] Getting headers for this collection.\n");
// Create a new struct
HeaderStruct* c_header_structs = malloc(SYS_MXL_HEADERS * sizeof *c_header_structs);
// Create a dynamic char array for headers
char ( *headers_ptr )[SYS_MXL_HEADER_NAME] = malloc( SYS_MXL_HEADERS * sizeof( char[SYS_MXL_HEADER_NAME] ) );
// Set the headers index
int headers_index = 0;
// Current working "header name"
char *header_name;
// Set the bytes for header name
size_t header_name_bytes = sizeof(char) * SYS_MXL_HEADER_NAME + 1;
// Allocate some memory
header_name = malloc(header_name_bytes);
// Check if allocation of memory was successful
if(header_name != NULL) {
// Give some blank values
memset(header_name, 0, header_name_bytes);
// Iterate over the data to get the first line only
int hi = 0;
for (char c = *c_data_ptr; c; c = *++c_data_ptr) {
// Check for a newline
if (c == '\n') {
// Add header_name to headers [position]
strcpy(headers_ptr[headers_index],header_name);
headers_index++;
break;
}
// Char = ,
if (c == ',') {
// Add header_name to headers [position]
strcpy(headers_ptr[headers_index],header_name);
headers_index++;
// Reset header name
memset(header_name, 0, header_name_bytes);
// Reset starting index
hi = 0;
} else {
// Add character to header nam
header_name[hi] = c;
hi++;
}
}
// Free the memory
free(header_name);
// Loop over each header
printf("\nOur final headers are:\n\n");
int j;
for(j = 0;j < headers_index;j++){
c_header_structs[j].position = j;
c_header_structs[j].indexed = 0;
strcpy(c_header_structs[j].header_name,headers_ptr[j]);
printf("Header %i | Value: %s\n",j,headers_ptr[j]);
}
// Return
return c_header_structs;
}
}
我现在使用 malloc 和 memset。
关于c - 进程已完成,退出代码 (0xC0000005),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533094/