首页 文章

“和”之间的差异

提问于
浏览
-4

我已经看到,如果我使用 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 回答

  • 5

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

    c中的 printf 函数需要一个字符串,因此您的代码 printf('numero'); 将导致意外行为 .

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

    您可以阅读this small tutorial以获得更多帮助

  • 0

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

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

    例:

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

    ' 将生成一个整数,在单个字符的情况下,它定义了's the ascii value that it represents, in case of multiple characters it' .

    例:

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

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

  • 1

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

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

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

  • 4

    c中, '' 用于字符常量, "" 用于字符串,与python不同,两者可以互换使用 .

  • 2

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

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

    '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表))视为某个内存地址,并尝试输出存储在该地址的内容 .

相关问题