我已经看到,如果我使用 printf
和'foo',我会收到警告 .
printf('numero');
警告:字符常量太长,因为它的类型[默认启用]警告:传递'printf'的参数1使得指针来自整数而没有强制转换 . /usr/include/stdio.h:362:12:注意:预期'const char * restrict'但参数的类型为'int'extern int printf(const char * __ restrict __format,...);警告:格式不是字符串文字而没有格式参数[-Wformat-security]
当我使用 ""
时,我没有收到任何警告 printf("numero");
那么, ''
和 ""
之间有什么区别?
5 回答
在c中,
'
用于字符常量,其中"
用于字符串c中的
printf
函数需要一个字符串,因此您的代码printf('numero');
将导致意外行为 .相反,使用
printf("numero");
您可以阅读this small tutorial以获得更多帮助
在c中字符串分隔符是
"
,'
用于字符常量 .双引号
"
将生成一个字符串,一个带有终止'\0'
字节的字节序列 .例:
'
将生成一个整数,在单个字符的情况下,它定义了's the ascii value that it represents, in case of multiple characters it' .例:
多字符串字符串也会生成一个整数,但它的值会根据c实现/编译器而改变 .
''
用于表示字符,而""
用于表示字符串 .printf
期望const char*
(一个字符串)作为其第一个参数 . 您需要使用""
. 如果你使用''
,编译器会抱怨并且会告诉你printf
期望const char*
作为它的第一个参数而不是char
.仅供参考,在
''
中添加多个字符(如'numero'
)将生成一个多字符文字,其值是实现定义的 .在c中,
''
用于字符常量,""
用于字符串,与python不同,两者可以互换使用 .字符文字和字符串文字之间存在差异 .
要定义字符文字,您需要使用单引号 . 例如
'A'
是一个角色lietral . 在C中它的类型为int
,甚至称为整数字符常量 . 它的值是字符内部表示的数值 . 您也可以使用多字节字符常量,例如'AB',但其值是实现定义的 .要定义字符串文字,您需要使用双引号 . 例如
"A"
是一个字符串文字 . 它具有两个字符的字符数组类型(包括终止零)char[2]
. 你可以想象它在表达式中,字符数组转换为指向其第一个元素的指针 . 因此,在表达式中,字符串文字将转换为
char *
类型 . 你可以想象它函数
printf
的第一个参数的类型为const char *
. 因此,可以在函数printf
中使用用作参数的字符串文字 .例如
它是一样的
其中p的定义如上所示 .
整数字符常量的类型为
int
. 使用它作为参数可能会导致未定义的行为,因为它的值将被函数printf解释为字符串的地址 . 所以这句话是无效的 . printf会将常量的内部值(例如65(如果考虑ASCII表))视为某个内存地址,并尝试输出存储在该地址的内容 .