簡體   English   中英

C:返回 D 作為 output 為什么?

[英]C: Returning D as output why?

#include <stdio.h>

int main(){
    char *s="hello world";
    printf("%c\n",s);
}

我在 C 中寫了一個小代碼。 在這段代碼的最后一條語句中,我在printf() function 中使用了%c格式說明符,並在其中分配了名為s的指針。 它給了我D作為 output。 它是返回垃圾值還是我的代碼自動在其中分配 ASCII 值或其他東西?

當我添加s+1它返回E並且s+2返回F等等。 誰能澄清我?

%c打印一個char ,而不是一個字符串。 由於您的變量s不是char ,而是指向char的指針, printf將字符串的地址解釋為字符。 您可能想要使用其中一個片段:

printf("%c\n", s[0]); // print the first character in your string
printf("%s\n", s); // print the whole string

關於:

printf("%c\n",s);

結果編譯器 output:

*untitled2.c:5:14: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ *[-Wformat=]*   

編譯時,始終啟用警告,然后修復這些警告。 建議:

printf("%s\n",s);

所以該語句使用正確的“輸出格式轉換”說明符來 output 整個字符串

- 或者 -

對 output 一個字符建議:

printf( "%c\n", s[0] );

到 output 只有第一個字符h

在考慮你在這段代碼中的表現時,可以說,是的,當你在printf()中給出s / s+1 / s+2 ... 時,你會得到垃圾值。 這只是因為您的格式說明符%c (類型為char )與s (類型為字符串)不匹配。 解決方法是將后者更改為char類型,您的問題將得到解決。

您無需擔心此值的來源,因為歸根結底,它是一個垃圾值,並且對於使用代碼的不同人來說會有所不同。 據我所知,它沒有可能的用途。

嘗試下面的代碼,您的代碼將正常工作:

    char *s="hello world";
    printf("%c\n",*s);

或者

    char *s="hello world";
    printf("%c\n",s[0]);

這些答案在上面的答案和評論中討論過。但你也應該試試這個,

    char s[]="hello world";
    printf("%c\n",s[0]);      

因為,雖然指針存在於 C、swift 等中。 不鼓勵他們,因為它們對 memory 安全和垃圾收集提出了重大問題。


編輯:Stackoverflow fam 需要對當前的 state 進行一些投票,我什至無法發表評論。 (只有我是對的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM