2016-09-22 2 views
2

В ассемблере, если у вас есть две переменные, адрес a0 и байт t0, легко хранить t0 в самом начале адреса а0, набравСохранение символа в адресной строке в C

sb $t0,0($a0) 

Теперь, Я хочу сделать то же самое в C, и в этом случае у меня

char* a0 = "AbC"; 
char t0 = 'w'; 

Я знаю, что я не могу получить доступ и изменить а0 [0] напрямую, потому что приводит к плохой ошибке доступа. Каков наиболее эффективный способ замены начала «A» в a0 значением в t0?

+0

'С.Б. $ t0,0 ($ a0)' - Я сильно сомневаюсь, что это будет работать на архитектуры, которые я программирую, поэтому ваша предпосылка уже не так. Для части C я рекомендую прочитать главу-указатель (и все главы перед ним) хорошей книги C. Это базовые вещи. – Olaf

+0

Ну, я использую симулятор MARS и его завершается сбой, когда адрес выходит за пределы допустимого диапазона (это не значит, что вы определили метку и значение). –

ответ

7

Вы не можете заменить 'A', потому что он находится в строковом литерале, который доступен только для чтения.

Вы можете, однако, сохранить строку в массиве, что делает буквы и доступными, а затем заменить 'A' легко:

char a0[] = "AbC"; 
char t0 = 'w'; 

a0[0] = t0; 
+0

В C скобки должны быть после идентификатора. –

+0

@DavidCullen Исправлено. – Downvoter

7

"AbC" выделяется в памяти чтения. Вы хотите его в памяти чтения/записи. Для этого используйте

char a0[] = "AbC"; 

Теперь у вас есть массив, если символы, которые вы можете изменить (у вас есть указатель на строку только для чтения).

+0

Таким образом, вы также можете получить доступ к a0 с помощью Нотация массива: a0 [0] = t0 – acornagl

+0

@acornagl, да, но вы также можете это сделать, когда 'a0' объявлен как' char * '. –

+0

@JohnBollinger, я согласен. – acornagl

1

В принципе при использовании полукокса * a0 = «ABC» утверждение, а0 только указатель, который указывает на память READ-ONLY, которая не может быть изменена.

Однако вы все еще можете использовать char * a0; заявление, но ваш код будет более compilcated

(не забудьте включить string.h библиотеку

char* a0 ; 
char t0 = 'w'; 
a0= (char *)malloc (10); 
strcpy(a0,"ABC"); 

a0[0]=t0; 
Смежные вопросы