Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:返回D作为输出为什么? #包括 int main(){ char*s=“你好,世界”; printf(“%c\n”,s); }_C_String_Pointers - Fatal编程技术网

C:返回D作为输出为什么? #包括 int main(){ char*s=“你好,世界”; printf(“%c\n”,s); }

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

我用C编写了一个小代码。在代码的最后一个语句中,我在
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编程