[英]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.