我有以下代码:
str = "ABCD"; //0x001135F8
newStr = "EFGH"; //0x008F5740
在第5位realloc之后 *str
- //0x001135FC
我希望它指向:0x008F5740
void str_cat(char** str, char* newStr)
{
int i;
realloc(*str, strlen(*str) + strlen(newStr) + 1); //*str is now 9 length long
// I want to change the memory reference value of the 5th char in *str to point to newStr.
// Is this possible?
// &((*str) + strlen(*str)) = (char*)&newStr; //This is my problem (I think)
}
答案 0 :(得分:1)
你似乎对C非常重要的东西感到困惑。指针只是内存中的一个地址。它住在街上的地址。假设我喜欢409 K Street。然后有人去喷涂油漆“D”在409,“E”在410,“A”在411,“D”在412.然后有人去喷涂油漆“B”在202 M Street,和“E”at 203,“E”在204,“F”在205.你是否可以去说“嘿,现在413 K街现在和202 M街一样?”不,它没有!相反,你必须找到一堆尚未涂漆的房屋,并在其中八个上写下“DEADBEEF”。
通过类比,在C中,您将为零终止符分配一个新字符串,其长度为两个字符串加1,然后将第一个字符串复制到前四个位置,然后将下一个字符串复制到余数中。
答案 1 :(得分:0)
void str_cat( char* dest, char* src )
{
dest = realloc( dest, strlen( dest ) + strlen( src ) + 1 );
strcpy( dest + strlen(dest), src );
}
应该可以工作 - 虽然我手头没有编译器来测试
甚至更快,几乎没有指针:http://www.koders.com/c/fid359660C181A42919DCB9E92C1406B7D16F27BB8D.aspx