连接两个字符串错误
我得到一个分段错误,当我尝试连接两个字符串如下面的代码:连接两个字符串错误
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);
}
我到底做错了什么?
由于
while(*result)++result; // 1
while(*result++ = *temp++); // 2
通过线1的端部,结果达到其端部,并且在第2行,要传递result
端和解除引用它。
char *result="hi";
result
指向字符串文字hi
与空终止。空终止之后的位置对于要访问的result
无效的可访问位置。但您正尝试在第2行访问它们。
您正在将值存储到result
指向的地址中,而未初始化result
以指向可用于存储结果的足够大的内存。通过将结果初始化为“Hi”,您已为其分配了三个字节。这还不足以保存您在最后尝试追加的附加数据。
我已经更改了代码以使结果初始化为某个值。不过,我得到段错误 – CuriousCoder
感谢您的解释。但是,我不知道会占用多少内存。那么,在这种情况下我应该怎么做?只是为它分配任意大的内存?这不是一个好的做法。 – CuriousCoder
你需要的内存量是strlen(result)+ strlen(ptr)+ sizeof('\ 0'),所以你应该分配多少内存。 –
嗯......结果'初始化了哪里? – Mysticial
将结果初始化为“hi”或“\ 0”会导致分段错误。 – CuriousCoder
请参阅K&R书籍以了解如何编写strcat()。这应该给你一个关于你的程序出了什么问题的好主意。 – yasouser