我试图通过更改指针来更改原始字符串的值。
说我有:
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);
,则会修改stringThree
,strcpy(*stringO, stringTwo);
,然后string Two
等。
答案 0 :(得分:2)
我希望它修改从
strcpy
复制的最新字符串。因此,如果上次调用strcpy( ( *stringO ), stringThree );
,则会修改stringThree
,strcpy( (*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
)。
答案 1 :(得分: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);