C 使用指针更改原始字符串的值

C 使用指针更改原始字符串的值,c,arrays,string,pointers,char,C,Arrays,String,Pointers,Char,我试图通过更改指针来更改原始字符串的值 假设我有: 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); strcp

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

假设我有:

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??
如何使用指针
stringO
更改
stringOne
,使其与
newStr
相同

编辑:我想这个问题相当不清楚。我希望它修改从中复制的最新字符串
*strcpy
。因此,如果
strcpy(*stringO,stringThree)时,它将修改
stringThree
strcpy(*stringO,stringTwo)然后
字符串二

这里有一种方法:

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);
这里有一个方法:

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);
我希望它修改从中复制的
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

我希望它修改从中复制的
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
)。

您不应强制转换
malloc
@chris()的结果@H2CO3该线程上的其他答案指出了包含cast@gta0004加入演员阵容是有原因的。甚至可能有一些很好的理由。但它们还不够好。如果您正在编写C代码,就不能强制转换返回值,正如我链接到的答案中的unwind所解释的那样。基本上,除了“你可以编译你的代码为C++”之外,没有什么可以成为Type的唯一有效原因——但是,你知道,没有一个理智的程序员试图编译C代码作为C++,因为它们是不同的,非常不同的语言。你不应该把<代码> MaloC/<代码>的结果。@克里斯()@H2CO3该线程上的其他答案指出了包含cast@gta0004加入演员阵容是有原因的。甚至可能有一些很好的理由。但它们还不够好。如果您正在编写C代码,就不能强制转换返回值,正如我链接到的答案中的unwind所解释的那样。基本上,除了“你可以编译你的代码作为C++”,其他都可能是Type的唯一有效原因,但是你知道,没有一个理智的程序员试图编译C代码作为C++,因为它们是不同的,非常不同的语言。是的,最新的,这就是我要做的。谢谢你的解释是的,这就是我想要的。谢谢你的邀请explanation@gta0004例如我不明白。什么不适合你?请看和。@gta0004:我不明白。什么不适合你?见和。