C:返回D作为输出为什么? #包括 int main(){ char*s=“你好,世界”; printf(“%c\n”,s); }
我用C编写了一个小代码。在代码的最后一个语句中,我在C:返回D作为输出为什么? #包括 int main(){ char*s=“你好,世界”; printf(“%c\n”,s); },c,string,pointers,C,String,Pointers,我用C编写了一个小代码。在代码的最后一个语句中,我在printf()函数中使用%C格式说明符,并在其中指定名为s的指针。它给我D作为输出。它是在返回垃圾值,还是我的代码在其中自动分配ASCII值,还是其他什么 当我添加s+1时,它返回E和s+2返回F,依此类推。谁能澄清一下吗?%c打印的是字符,而不是字符串。由于变量s不是char,而是指向char的指针,printf将字符串的地址解释为字符。您可能希望使用以下代码段之一: printf(“%c\n”,s[0]);//打印字符串中的第一个字符 p
printf()
函数中使用%C
格式说明符,并在其中指定名为s
的指针。它给我D
作为输出。它是在返回垃圾值,还是我的代码在其中自动分配ASCII值,还是其他什么
当我添加
s+1
时,它返回E
和s+2
返回F
,依此类推。谁能澄清一下吗?%c
打印的是字符,而不是字符串。由于变量s
不是char
,而是指向char
的指针,printf
将字符串的地址解释为字符。您可能希望使用以下代码段之一:
printf(“%c\n”,s[0]);//打印字符串中的第一个字符
printf(“%s\n”,s);//打印整个字符串
%c
打印的是字符,而不是字符串。由于变量s
不是char
,而是指向char
的指针,printf
将字符串的地址解释为字符。您可能希望使用以下代码段之一:
printf(“%c\n”,s[0]);//打印字符串中的第一个字符
printf(“%s\n”,s);//打印整个字符串
在考虑你在这段代码中的表现时,让我们说,是的,当你给出s
/s+1
/s+2
。。。在printf()
中。这只是因为格式说明符%c
(类型为char
)与s
(类型为string)不匹配。解决方法是将后者更改为键入char
,您的问题将得到解决
你不必担心这个值是从哪里来的,因为在一天结束的时候,它是一个垃圾值,对于使用代码的不同的人来说,它是不同的。就我所知,它没有可能的用途
尝试以下代码,您的代码将正常工作:
#include <stdio.h>
int main(){
char *s="hello world";
printf("%c\n",s);
}
或
这些答案在上面的答案和评论中进行了讨论。但是你也应该试试这个
char *s="hello world";
printf("%c\n",s[0]);
因为,尽管C、swift等语言中存在指针,但不鼓励使用指针,因为它们会带来内存安全和垃圾收集方面的主要问题
编辑:Stackoverflow fam在当前状态下需要一些升级投票,我甚至无法发表评论。(只有在
我是对的)在考虑你在这段代码中的表现时,让我们说,是的,当你给出s
/s+1
/s+2
。。。在printf()
中。这只是因为格式说明符%c
(类型为char
)与s
(类型为string)不匹配。解决方法是将后者更改为键入char
,您的问题将得到解决
你不必担心这个值是从哪里来的,因为在一天结束的时候,它是一个垃圾值,对于使用代码的不同的人来说,它是不同的。就我所知,它没有可能的用途
尝试以下代码,您的代码将正常工作:
#include <stdio.h>
int main(){
char *s="hello world";
printf("%c\n",s);
}
或
这些答案在上面的答案和评论中进行了讨论。但是你也应该试试这个
char *s="hello world";
printf("%c\n",s[0]);
因为,尽管C、swift等语言中存在指针,但不鼓励使用指针,因为它们会带来内存安全和垃圾收集方面的主要问题
编辑:Stackoverflow fam在当前状态下需要一些升级投票,我甚至无法发表评论。(只有在
我是对的)关于:
char s[]="hello world";
printf("%c\n",s[0]);
编译器输出中的结果:
printf("%c\n",s);
编译时,始终启用警告,然后修复这些警告。建议:
*untitled2.c:5:14: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ *[-Wformat=]*
因此,语句使用正确的“输出格式转换”说明符来输出整个字符串
--或--
要输出单个字符,建议:
printf("%s\n",s);
要仅输出有关以下内容的第一个字符,请执行以下操作:
char s[]="hello world";
printf("%c\n",s[0]);
编译器输出中的结果:
printf("%c\n",s);
编译时,始终启用警告,然后修复这些警告。建议:
*untitled2.c:5:14: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ *[-Wformat=]*
因此,语句使用正确的“输出格式转换”说明符来输出整个字符串
--或--
要输出单个字符,建议:
printf("%s\n",s);
只输出第一个字符h
,因为字符串是用%s
打印的,正如您最喜欢的初级C编程书的第一章所述。您的代码调用了一个未定义的行为错误,这意味着任何事情都可能发生。可能编译器试图将地址的第一个字节作为字符打印到s
。请检查数据类型…@Sourav Ghosh谢谢。因为字符串是用%s
打印的,正如您最喜欢的初级C编程书的第一章所述。您的代码调用了一个未定义的行为错误,这意味着任何事情都可能发生。可能编译器试图将地址的第一个字节作为字符打印到s
。检查数据类型…@Sourav Ghosh谢谢。我认为s[0]
更适合作为*s
来传达代码的意图。这是一个很好的建议@Ackdari,我将编辑我的答案。谢谢我认为s[0]
更适合作为*s
来传达代码的意图。这是一个很好的建议@Ackdari,我将编辑我的答案。谢谢在C语言中没有类型字符串char*
确实是在C中声明字符串的正确方法。@Ashish Kumar谢谢。还有一个问题string s=“hi”是否适用于C。正如您在回答中所发布的那样。我是否需要导入任何库或其他东西才能在C中工作。@MartinFink char array->“char name[]'是在C中声明字符串的正确方法。看这里,您可以在这里找到差异@ManinderSingh my bad sorry。。。我用java编程