0

我试图通过更改指针来更改原始字符串的值。

说我有:

char **stringO = (char**) malloc (sizeof(char*));
*stringO = (char*) malloc (17);    
char stringOne[17] = "a" ;
char stringTwo[17] = "b";
char stringThree[17] = "c";
char newStr[17] = "d";
strcpy(*stringO, stringOne);
strcpy(*stringO, stringTwo);
strcpy(*stringO, stringThree);
//change stringOne to newStr using stringO??

我怎样才能改变stringOne它与newStr使用指针相同stringO

编辑:我想这个问题还不清楚。我希望它修改*strcpy从中复制的最新字符串。因此,如果strcpy(*stringO, stringThree);最后一次调用,它将修改stringThreestrcpy(*stringO, stringTwo);然后string Two等等。

4

2 回答 2

2

我希望它修改从中复制的最新字符串。strcpy因此,如果strcpy( ( *stringO ), stringThree );最后一次调用,它将修改stringThreestrcpy( (*stringO ), stringTwo );然后stringTwo等等。

使用您的方法不可能做到这一点,因为您正在使用-- 不指向内存块来制作字符串的副本。strcpy为了实现您的目标,我将执行以下操作:

char *stringO = NULL;

char stringOne[ 17 ] = "a";
char stringTwo[ 17 ] = "b";
char stringThree[ 17 ] = "c";
char newStr[ 17 ] = "d";

stringO = stringOne; // Points to the block of memory where stringOne is stored.
stringO = stringTwo; // Points to the block of memory where stringTwo is stored.
stringO = stringThree; // Points to the block of memory where stringThree is stored.

strcpy( stringO, newStr ); // Mutates stringOne to be the same string as newStr.

...请注意,我正在变异(更新)stringO指向的位置,而不是将字符串复制到其中。这将允许您根据请求更改 stringO 指向的内存块中的值(因此这stringXXX是存储最新版本的位置)。

于 2013-08-16T04:50:59.020 回答
1

这是一种方法:

char **stringO = (char**) malloc (sizeof(char*));
char stringOne[17] = "a" ;
char stringTwo[17] = "b";
char stringThree[17] = "c";
char newStr[17] = "d";

*stringO = stringOne;
strcpy(*stringO, newStr);

如果我必须使用stringO您为其分配内存的方式,那么:

strcpy(*stringO, newStr);
strcpy(stringOne, *stringO);
于 2013-08-16T04:49:52.003 回答