2014-10-11 57 views
-3

我已經寫了一個函數來獲取一個char數組並操作它的值(即,如果它是一個數字,則將char轉換爲int)。但是,我對char數組的管理方式有疑問。當我查看input[i]時,它是正確的值(放在數組中的值,但是,&input[i]給出了一個大寫字母,我不知道它爲什麼會這樣做。例如,如果我輸入「11」並且跟蹤變量,我可能會得到以下結果:從字符數組中獲取一個值

input[0] is 1 
&input[0] is D 
input[1] is 1 
&input[1] is E 

在我的代碼,如果我嘗試使用input[i],我得到的「傳遞參數使得指針從沒有投整數」的錯誤。如果我使用&input[i]。 ,代碼編譯但我得到了錯誤的結果。這是怎麼回事,我如何訪問我想要得到的值?

以下是我的代碼:

void myFunction(char *input) { 
    Queue* numberQueue = queue_new(); 
    Queue* opQueue = queue_new(); 
    int i = 0; 
    int j; 

    for (j = 0; j < strlen(input); j++) { 
     printf("input[%d] is %c\n", i, input[i]); 
     printf("&input[%d] is %c\n", i, &input[i]); 

     int number = (int)input[i]; 

     /* queue_push_tail(queue, data) */ 
     queue_push_tail(numQueue, number);   /* ERROR */ 

     /* rest of code omitted */ 

     i++; 
    } 
} 
+2

提示:您認爲'&input [i]'是什麼? – juanchopanza 2014-10-11 07:44:34

+0

不是'&'表示它是對變量在內存中的位置的引用嗎?我不完全明白爲什麼這會起作用,但正常變量不會。 – anoneponymous 2014-10-11 07:45:58

+0

@anoneponymous您正在打印地址並將其轉換爲%c,因此基本上可以顯示任何內容。 – 2014-10-11 07:47:59

回答

0

如果我知道你要推的每個數字在input字符串爲queue_push_tail,爲整數值那麼你希望你的循環中做這樣的事情:

for (j = 0; j < strlen(input); j++) { 

    if (input[j] >= '0' && input[j] <= '9') 
    { 
     number = input[j] - '0'; 

     /* queue_push_tail(queue, data) */ 
     queue_push_tail(numQueue, number);   /* ERROR - FIXED*/ 

     /* rest of code omitted */ 
    } 
} 

回想一下, ASCII字符本身是無符號整數。您只需通過減去ASCII '0'的值來調整每個字符的值。如果您需要將字符串中的所有數字都收集到一個數字中(例如ac7f9gh3 =>793),則只需將未調整的值存儲在臨時字符串中,然後致電atoi (temp)

相關問題