C中的这个连接函数有什么问题?

时间:2013-02-27 04:13:48

标签: c string concatenation

这是使用结构的家庭作业的一部分,我似乎无法理解这一个功能。函数是string_t * concat(string_t * s1,string_t * s2),它返回新的字符串struct。这就是我到目前为止所遇到的,只要它到达就会崩溃编译器。程序编译,但“文件”.exe已停止工作错误在执行时出现。任何帮助将不胜感激。谢谢!

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

2 个答案:

答案 0 :(得分:4)

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]

答案 1 :(得分:0)

顺便说一下,这是一种没有丑陋的ptr数学语法的猫的方法:

char* dest = newStr->line;

const char* src = s1->line;
while (*src)
{
  *dest = *src;
  ++dest;
  ++src;
}

src = s2->line;
while (*src)
{
  *dest = *src;
  ++dest;
  ++src;
}

*dest = '\0';