这是使用结构的家庭作业的一部分,我似乎不理解这个函数。函数是string_t*concat(string_t*s1,string_t*s2),它返回新的string结构。这就是我到目前为止所掌握的,当编译器到达时它就会崩溃。程序正在编译,但执行时出现“file.exe has stopped working error”。任何帮助都将不胜感激。谢谢!
typedef struct string{ //String struct (in .h file)
char *line;
int length;
} string_t;
string_t* concat(string_t *s1, string_t *s2) { //actual function (in .c)
int len1, len2;
len1 = length(s1);
len2 = length(s2);
int i, j, s;
string_t *newStr;
newStr = (string_t*)malloc(sizeof(string_t)*2);
for (i = 0; i<len1; i++) {
*((newStr->line)+i) = *((s1->line)+i);
}
for (j=0; j<len2; j++) {
*((newStr->line)+(i+j)) = *((s2->line)+j);
}
*((newStr->line)+(i+j))='\0';
return newStr;
}
concat(s1, s2); //tests function
最佳答案
newStr = (string_t*)malloc(sizeof(string_t)*2);
为
newStr
分配内存,但不为newStr->line
分配内存。尝试以下方法:newStr = malloc(sizeof *newStr);
newStr->line = malloc(s1->length + s2->length + 1);
旁注:
*((newStr->line)+i)
可以写成newStr->line[i]
。关于c - C中的此串联函数有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15104091/