在此示例中,我试图将整数文字与types []数组进行匹配。从技术上讲,printf()应该为printf(“变量%c =%d(%s)\ n”),但是如果我没有将type [i]指定为字符,则会出错。
#include <stdio.h>
#include <string.h>
extern int ints[];
extern char strs[];
extern char types[];
extern void intro();
int ints[] = {
212, 215u, 0xFeeL, 07, 032U, 85, 0213, 0x4b, 30, 30u, 30l, 30ul
};
char strs[] = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'
};
char types[] = {
"decimal",
"decimal unsigned",
"hexadecimal long",
"octal",
"octal unsigned",
"decimal",
"octal",
"hexadecimal",
"decimal",
"decimal unsigned",
"decimal unsigned",
"decimal unsigned long"
};
int main(){
int i;
for(i = 0; i < 12; i++){
printf("The variable %c = %d (%c) \n", strs[i], ints[i], types[i]);
}
return 0;
}
void intro(){
printf("------\n");
printf("Looping through these results \n");
printf("------\n");
}
我确信对于C经验丰富的人来说,我缺少一些简单的东西。
谢谢!
答案 0 :(得分:3)
您犯了一个愚蠢的错误。错误是您的types []数组是字符数组而不是字符串数组。
一个字符是:
char types = 'a';
一个字符数组是:
char types[] = {'a', 'b'};
字符串是:
char types[] = "hello";
还有:
char *types = "hello";
一个字符串数组是:
char *types[] = {"hello", "world"};
您打算做的是:
char *types[] = {
"decimal",
"decimal unsigned",
"hexadecimal long",
"octal",
"octal unsigned",
"decimal",
"octal",
"hexadecimal",
"decimal",
"decimal unsigned",
"decimal unsigned",
"decimal unsigned long"
};
现在您可以将printf更改为:
printf("The variable %c = %d (%s) \n", strs[i], ints[i], types[i]);
答案 1 :(得分:0)
您需要一个字符串数组(const char *
,而不是字符数组(char
),即:
const char *types[] = {
有了这个选项,您就不会在printf(应该在其中)中收到有关%s
的任何警告/错误。
答案 2 :(得分:0)
append
这是string literal。它的类型是"decimal"
,它是一个字符数组。在大多数情况下,类型数组会衰减(读为:原子性地改变)为类型指针。
char[]
这是无效的代码,但通常仅带有一个警告进行编译。在这里,字符串文字被转换为char a = "decimal";
类型,即指向char的指针。然后将指向char value 的指针转换为char value (因此,它正在从其中删除信息,因为通常char*
比sizeof(char) = 1
小得多)。
sizeof(char*)
同样的事情一遍又一遍地发生。 char a[] = { "decimal", "blabla", };
指针 value 被转换为char值。可以用(假设CHAR_BIT = 8)来更详细地表示:
char*
您想要的是字符串文字数组。您可以通过存储指向字符串文字的指针数组来实现这一点。 char a[] = {
(char)((uintptr_t)(char*)"decimal") & 0xff),
(char)((uintptr_t)(char*)"blabla") & 0xff),
};
指针数组,即char*
类型。
char*[]
或者您可以存储字符串:
const char *types[] = {
"decimal",
"decimal unsigned",
"hexadecimal long",
"octal",
"octal unsigned",
"decimal",
"octal",
"hexadecimal",
"decimal",
"decimal unsigned",
"decimal unsigned",
"decimal unsigned long"
};
即。这是一个双数组。
注意:字符串文字是不可变的,对其进行修改是未定义的行为(阅读:请勿这样做)。