2011-11-02 224 views
0

我得到一个分段错误,当我尝试连接两个字符串如下面的代码:连接两个字符串错误

EDITED

//global variables 
char *result="hi"; 
char *temp; 

size_t write_data(char *ptr, size_t size, size_t nmeb, void *stream) 
{ 
    temp=(char *)ptr; 

    while(*result)++result; 

    while(*result++ = *temp++); 

    return fwrite(ptr,size,nmeb,stream); 
} 

我到底做错了什么?

由于

+2

嗯......结果'初始化了哪里? – Mysticial

+0

将结果初始化为“hi”或“\ 0”会导致分段错误。 – CuriousCoder

+0

请参阅K&R书籍以了解如何编写strcat()。这应该给你一个关于你的程序出了什么问题的好主意。 – yasouser

回答

1
while(*result)++result; // 1 

while(*result++ = *temp++); // 2 

通过线1的端部,结果达到其端部,并且在第2行,要传递result端和解除引用它。

char *result="hi"; 

result指向字符串文字hi与空终止。空终止之后的位置对于要访问的result无效的可访问位置。但您正尝试在第2行访问它们。

+0

不知道为什么给它-1? – yasouser

+0

@downvoter - 'result'是一个指针而不是数组。所以,我认为OP只是指向一个字符串文字。 – Mahesh

+1

即使他没有指向新示例中的边界,仍然无法写入只读内存。 – AusCBloke

2

您正在将值存储到result指向的地址中,而未初始化result以指向可用于存储结果的足够大的内存。通过将结果初始化为“Hi”,您已为其分配了三个字节。这还不足以保存您在最后尝试追加的附加数据。

+0

我已经更改了代码以使结果初始化为某个值。不过,我得到段错误 – CuriousCoder

+0

感谢您的解释。但是,我不知道会占用多少内存。那么,在这种情况下我应该怎么做?只是为它分配任意大的内存?这不是一个好的做法。 – CuriousCoder

+1

你需要的内存量是strlen(result)+ strlen(ptr)+ sizeof('\ 0'),所以你应该分配多少内存。 –