更改char *的内存地址

时间:2012-09-16 09:23:47

标签: c memory-management syntax

我有以下代码:

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)
}

2 个答案:

答案 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