无法打印char数组的元素

时间:2014-10-07 13:32:03

标签: c codeblocks kernighan-and-ritchie

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

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

这只是一个例子。

IDE(Code :: Blocks)生成:程序接收信号SIGSEGV,Sigmentation fault。

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

3 个答案:

答案 0 :(得分:2)

如果你使用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]);

答案 1 :(得分:1)

使用

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

获取数组的第一个元素

答案 2 :(得分:1)

您尝试做的事情不起作用,因为printf函数中使用的参数不正确。 printf被称为:{/ p>

printf ( const char * format, ... )

正如您所看到的,它至少需要一个参数,它是一个格式字符串,它可以使用任何数量的附加参数,如省略号(...)所示。

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

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

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