我有点困惑。 我用纯C编写。以下代码不起作用:
char arr[] = "0x123";
printf(arr[0]);
这只是一个例子。
IDE(Code :: Blocks)生成:程序接收信号SIGSEGV,Sigmentation fault。
为什么这段代码不起作用?
答案 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]);