2012-09-20 286 views
1

下面打印C程序的16名字的字符串第一個和最後一個字符:在數組中打印字符串打印兩個字符?

#include<stdio.h> 
#include<string.h> 

void main() 
{ 
    char first, last; 
    char *str = "abcdefghijklmnop"; 
    first = str[0]; 
    last = str[15]; 
    printf("%s", &first); 
    printf("%s", &last); 
} 

我尋求的輸出是A和P。但是,當我運行此代碼時,我得到輸出:

apa 

我在做什麼錯?

回答

2

低於線將帶來正確的結果

printf("%c", first); 
printf("%c", last); 
+2

我希望OP謹慎接受第一個可行的答案,並繼續前進......如果你想成爲一名優秀的程序員,你必須瞭解*爲什麼*事情按照他們的方式工作。 – mpen

3

你錯過了指針的理解。當您將字符分配到firstlast時,那麼這些字符將基本上覆制到firstlast。由於firstlast是不同的變量,因此它們的地址與指針char *str無關。另外,printf("%s", &first);(和上一個相同)調用未定義的行爲,因爲printf需要以0結尾的字符串,但只傳遞一個字符,之後沒有零終止符。

你能做的要麼是使用指針:

char *first = str + 0; 
char *last = str + 15; 
printf("%s %s", first, last); 

這將打印abcdefghijklmnop p

或僅打印兩個字符:

char first = str[0]; 
char last = str[15]; 
printf("%c %c", first, last); 

這將打印a p

1

您的變量firstlast是實際的字符值,而不是字符串/指針。您需要使用%c。嘗試:

#include<stdio.h> 
#include<string.h> 

void main() 
{ 
    char first, last; 
    char *str = "abcdefghijklmnop"; 
    first = str[0]; 
    last = str[15]; 
    printf("%c", first); 
    printf("%c", last); 
} 

%s期望得到指向字符值的數組,並保持閱讀,直到它到達一個NULL字符\0的指針。

您可以在這裏閱讀更多關於http://pw1.netcom.com/~tjensen/ptr/ch3x.htmhttp://www.codingunit.com/printf-format-specifiers-format-conversions-and-formatted-output

我發現下面的C++頁面有更好的圖表可視化指針http://cplusplus.com/doc/tutorial/pointers/