2016-09-22 41 views
2

地址位置在彙編語言的字符,如果你有兩個變量,地址A0和字節T0,很容易儲存T0地址A0之初通過鍵入存儲在用C

sb $t0,0($a0) 

現在,我想要做同樣的事情在C,在這種情況下我有

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

我知道我不能訪問和修改A0 [0]由​​於直接導致壞訪問錯誤。將a0中的開始「A」替換爲t0中的值的最有效方法是什麼?

+0

'SB $ 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」語句,A0是隻有一個指針指向只讀內存,不能被修改。

但是,你仍然可以使用char * a0;語句,但您的代碼將被更多compilcated

(請記住,包括string.h中圖書館

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

a0[0]=t0;