2011-04-27 129 views
0

我在將一個字符串數組中的特定值的地址存儲到指針並將其打印出來時遇到了一些問題。請原諒那些不好的變量名稱,它們只是爲了這個例子。將字符串的地址存儲在字符串數組中

char **code;      // code is an array of 100 strings of length 8 characters 
code = malloc (100*sizeof(*code)); 
for (i=0; i<100; i++) { 
    code[i]=malloc(8*sizeof(**code)); 
} 

char **r;      // r is an array of 16 strings of 32 characters 
r = malloc (16*sizeof(*r)); 
for (i = 0; i < 16; i++) 
    r[i] = malloc(32*sizeof(**r)); 

char *a;       // a is a pointer to a string 

a = (char *) &r[13];    // point a to value at r[13] 

*a = (char *)&code[100];   // trying to assign the value of r[13] to the address of code[100] 

printf("Code 100 Add: %p a Val: %i\n", &code[100], *sp); // trying to check values. 

我想要(R [13]的值,它指向至r [13],所以分配)在代碼[100]分配的值,以字符串的地址的值。即使是32個字符的字符串也是最好的方法嗎?

得到任何幫助, 加雷思

+0

這個例子有很多缺陷。示例:不投射malloc的結果,將(char *)分配給(a)和(* a)。你能發佈真實的代碼嗎?你試圖做什麼?如果編譯出現問題 - 從編譯器錯誤開始。如果您在嘗試運行時遇到問題 - 請發佈編譯好的代碼並從一個好的調試器和較小的陣列開始,以便您可以看到每一步發生了什麼。 – evan 2011-04-27 17:37:46

回答

3
a = (char *) &r[13];    // point a to value at r[13] 

打開你的編譯器警告,並注意哪些編譯器告訴你,當你刪除此演員。你不應該在這段代碼中需要任何強制轉換。

類型的rchar**等的r[13]類型爲char*,和&r[13]類型是char**,你要指定一個char*

P.s.下次請包括您收到的實際錯誤與您的預期。

0

要指定一個字符串,使用strncpy。不要直接複製指針值,因爲您將以這種方式將其釋放兩次(以及其他問題)。

+0

所以像這樣: 'strcpy(a,&code [100]);' 它似乎仍然沒有根據printf存儲正確的值 – gskspurs 2011-04-27 17:26:32

+0

您不需要額外的'&',因爲'code [ 100]'已經指向一個字符串的開頭。 – 2011-04-27 17:28:56

+0

最安全的是'strncpy(a,code [100],31); a [31] ='\ 0';'當然,你應該使用常量而不是字面值。 – 2011-04-27 17:29:18

0

&r[13]不是指向char的指針。

你只需要

r[13] = code[100] 

我與弗雷德裏克同意,你應該小心,當free() -ing分配的內存,因爲你現在有兩個指針在相同的存儲器塊指示。如果你喜歡跟隨他的意見,請嘗試以下操作:

strncpy(r[13], code[100], 8) 
0

而不是分配一個指向內存地址的指針,您將要使用strcpy複製該內存地址處的數據。

0

隨着char *a;的定義,作業左側的*a變爲char類型的lvalue。你可以用把指針值作爲整數賦值,就像把方塊釘入圓孔一樣,儘管它沒有多大意義。要複製字符串,請使用str[nl]cpy(3)

0

我討厭在別人的問題中提出問題......但是不應該把char數組設置/ malloc調用更像這樣嗎?他是不是用sizeof(** code)分配太多?然後......如果是8個字符......我們不想讓9爲'\ 0'騰出空間嗎?

char **code;      // code is an array of 100 strings of length 8 characters 
code = (char**) malloc (100*sizeof(char*)); 
for (i=0; i<100; i++) { 
    code[i] = (char*)malloc(9*sizeof(char)); 
} 
+0

+1我剛剛注意到這一點,我認爲沒有人意識到。 – 2011-04-27 18:43:40