2012-02-03 59 views
0

我的頭越來越扭曲試圖弄清楚。在C中的字符串操作

該任務是從用戶那裏獲取一行文本,然後將其打印出來,包括每個字符的十六進制代碼。

我認爲這本來很簡單,而且可能一旦我明白了用法。

我的想法是,我會設置我的變量使用char stg_array[80]這將給我一個80字符的最大大小。

然後,我會做一個

while((stg_array[i] = getch()) != '\n') 
{ 
    i++; 
} 

然後我會用strlen()來確定實際長度(我知道我已經擁有它,只是想利用strlen()練習),並放到一個for循環,會從strlen(stg_array)-1

printf("Array[%d] = %s Hex Value = %X", i, stg_array[i], i); 

我理解的緩衝區溢出漏洞倒計時我能有如果用戶鍵入超過80個字符。現在不擔心這一點。

我得到的是strlen()正在返回文本中第一個空格的長度。

如果我跳過用戶輸入,只需在中間固定for循環(例如10)使char stg_array[80]={"The quick brown fox."}程序崩潰即可。

我在想我要出去吃午餐,瞭解C字符串數組的功能。

+2

以供將來參考,使用'{}'鍵代碼,而不是它加粗。 – Marlon 2012-02-03 19:12:53

+0

告訴我們。 – cnicutar 2012-02-03 19:14:15

+2

要回復@Marlon,請花點時間[閱讀Stack Overflow的格式化語法](http://stackoverflow.com/editing-help)。 – 2012-02-03 19:15:29

回答

1

希望以下幫助!

#include <stdio.h> 

#define MAX 80 

int main(void) 
{ 
    char stg_array[MAX]; 
    int i = 0, j; 
    int len; 

    printf("Enter String : "); 
    while((i < MAX-1) && ((stg_array[i] = getchar()) != '\n')) { 
     i++; 
    } 
    stg_array[i] = '\0'; 

    for (j=i ; j>=0 ; j--) { 
     printf("stg_array[%d] = %c/%x \n", j, stg_array[j], stg_array[j]); 
    } 

    return 0; 
} 

輸出:

Enter String : this is a test string 
stg_array[21] =/0 
stg_array[20] = g/67 
stg_array[19] = n/6e 
stg_array[18] = i/69 
stg_array[17] = r/72 
stg_array[16] = t/74 
stg_array[15] = s/73 
stg_array[14] = /20 
stg_array[13] = t/74 
stg_array[12] = s/73 
stg_array[11] = e/65 
stg_array[10] = t/74 
stg_array[9] = /20 
stg_array[8] = a/61 
stg_array[7] = /20 
stg_array[6] = s/73 
stg_array[5] = i/69 
stg_array[4] = /20 
stg_array[3] = s/73 
stg_array[2] = i/69 
stg_array[1] = h/68 
stg_array[0] = t/74 
+0

與我所做的非常類似,但是我沒有在字符串末尾添加\ 0。由於字符串需要用\ 0終止,會導致問題嗎? – 2012-02-03 19:38:36

+0

@ChefFlambe是的,這是一回事。緩衝區溢出是另一個。所以我在while循環中添加了一個檢查。 – 2012-02-03 19:46:13

0

你需要的是解決你給什麼作爲參數傳遞給printf的的%X,那麼你不應該使用char stg_array[80]={'The quick brown fox.'}(這甚至不應該編譯,給你一個「單字符常量太長,其類型爲」錯誤),但相反(我用char *替換了char [80],因爲它更爲正確,但是如果你願意的話,你可以保留你的)。

如果strlen()返回一個值,它總是正確的。 strlen()永遠不會返回字符串中第一個空格的索引,如果你認爲它的確如此,那麼你做錯了什麼。