“和”之间的差异

我已经看到,如果我使用带有’foo’的printf ,我会收到警告。

 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");

那么, ''''之间有什么区别?

在c中 , ''用于字符常量, ""用于字符串,不像python ,两者都可以互换使用。

在c中,字符串分隔符是"'用于字符常量。

双引号"将生成一个字符串,一个带有终止'\0'字节的字节序列。

例:

 const char *string = "Example"; /* the sequence -> ['E', 'x', 'a', 'm', 'p', 'l', 'e', '\0'] is generated */ 

'将生成一个整数,在单个字符的情况下,它是它所代表的ascii值,如果是多个字符,则它是实现定义的。

例:

 char A = 'A'; /* the ascii value of 'A', 0x41 or 65 decimal */ 

多字符串字符串也会生成一个整数,但它的值会根据c实现/编译器而改变。

字符文字和字符串文字之间存在差异。

要定义字符文字,您需要使用单引号。 例如

'A'是一个角色lietral。 在C中它具有int类型,甚至称为整数字符常量。 它的值是字符内部表示的数值。 您也可以使用多字节字符常量,例如’AB’,但其值是实现定义的。

要定义字符串文字,您需要使用双引号。 例如, "A"是字符串文字。 它具有两个字符(包括终止零) char[2]的字符数组的类型。 你可以想象它

 char s[2] = { 'A', '\0' }; 

在表达式中,字符数组转换为指向其第一个元素的指针。 因此,在表达式中,字符串文字将转换为char *类型。 你可以想象它

 char s[2] = { 'A', '\0' }; char *p = s; 

函数printf的第一个参数的类型为const char * 。 因此,可以在函数printf使用用作参数的字符串文字。

例如

 printf( "A" ); 

它是一样的

 printf( p ); 

其中p的定义如上所示。

整数字符常量的类型为int 。 使用它作为参数可能会导致未定义的行为,因为它的值将被函数printf解释为字符串的地址。 所以这句话

 printf( 'A' ); 

是无效的。 printf会将常量的内部值(例如65(如果考虑ASCII表))视为某个内存地址,并尝试输出存储在该地址的内容。

''用于表示字符,而""用于表示字符串。

printf期望一个const char* (一个字符串)作为它的第一个参数。 你需要使用"" 。 如果你使用'' ,编译器会抱怨并告诉你printf期望一个const char*作为它的第一个参数而不是char

仅供参考,在'' (如'numero' )中添加多个字符将构成一个多字符文字,其值是实现定义的。

在c中, '用于字符常量,其中"用于字符串

c中的printf函数需要一个字符串,所以你的代码是printf('numero'); 将导致意外的行为。

相反,使用printf("numero");

您可以阅读这个小教程以获得更多帮助