2013-08-16 2 views
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); был последний называется, он будет изменять stringThree, strcpy(*stringO, stringTwo); затем string Two и т.д.

+1

Вы не должны указывать результат 'malloc'. – chris

+1

@chris ([пояснение] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858)) –

+0

@ H2CO3 другие ответы на эту тему указывают на веские причины, чтобы включить литье – gta0004

ответ

2

Я хочу, чтобы изменить последнее строки, которая strcpy в s скопировано из. Так что, если 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 указывает на не копировать строку в него. Это позволит вам мутировать значения в блоках памяти, которые строятся как точки (как следствие, там, где хранится последний stringXXX) - по запросу.

+0

да последнее, это было то, что я собирался. Спасибо за объяснение – gta0004

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); 
+0

нет, но использование '=', а не 'strcpy', исправить его – gta0004

+0

@ gta0004: я не понимаю. Что не сработало для вас? См. [This] (http://ideone.com/vDdnQz) и [это] (http://ideone.com/kBtw33). – jxh

Смежные вопросы