【问题标题】:Can't print element of char array无法打印 char 数组的元素
【发布时间】:2014-10-07 13:32:03
【问题描述】:

我有点困惑。 我用纯C写的。下面的代码不起作用:

char arr[] = "0x123";
printf(arr[0]);

这只是一个例子。

IDE(Code::Blocks) 生成:程序收到信号 SIGSEGV,Sigmentation 错误。

为什么这段代码不起作用?

【问题讨论】:

  • 因为 printf 期望指向一个以 nul 结尾的字符串,而不是单个字符。
  • 检查 printf 语法。

标签: c codeblocks kernighan-and-ritchie


【解决方案1】:

如果你使用 llvm/clang,编译器会发出一个不言自明的警告:

test.c:3:9: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
        printf(a[0]);

这意味着您应该提供一个格式化字符串作为第一个参数,例如printf("%c", arr[0]);

【讨论】:

    【解决方案2】:

    使用

    printf("%c",arr[0]);
    

    获取数组的第一个元素

    【讨论】:

    • 这是正确的建议,但如果能解释为什么现有代码是错误的并且这是正确的,那就更好了。您可能会提到 printf("%s\n", arr); 作为另一种选择。
    【解决方案3】:

    您尝试执行的操作不起作用,因为printf 函数中使用的参数不正确。 printf 是这样调用的:

    printf ( const char * format, ... )
    

    如您所见,它至少需要一个格式字符串参数,并且可以采用省略号 (...) 指示的任意数量的附加参数

    格式字符串可以包含任意数量的格式说明符,用于打印附加参数的值。请注意,格式说明符和您的附加参数必须在数量和类型上匹配。

    你做错了什么是你提供了一个非法的格式字符串。如果你想从你的数组中打印一个字符,你的格式字符串必须是包含%c的字符格式说明符的东西。您还必须提供实际值作为附加参数。这意味着对于数组中的第 0 个字符,printf 应该如下所示:

    printf("%c", arr[0]);
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2022-11-14
      • 1970-01-01
      • 2011-03-23
      • 2013-12-29
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多