如何满足有关printf()上不兼容类型的警告

问题描述 投票:0回答:2

我正在学习learning-c.org上的教程。关于Arrays and Pointers的部分,如果我在系统上运行示例程序的前两行,则会发出警告:

char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;

代码运行,但是我收到以下警告:

警告:从不兼容的指针类型'char(*)[5]中初始化'char *'] [-Wincompatible-pointer-types]15 | char * pvowels =&vowels;

如果我将其强制转换为],我可以摆脱此警告>

char *pvowels = (char *) &vowels;

但是那是发出警告的正确方法吗?首先,似乎没有必要,我不太了解char *char (*)之间的区别。


接下来,printf行为第三个参数发出警告,说:

警告:格式为'%u'的参数应为'unsigned int'类型,而参数3的类型为'char *'[-Wformat =]

(与参数5和7相同)

这个我什至不知道如何投射才能绕过警告...打印这个的正确方法是什么?


整个教程中的程序可供参考:
char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;
int i;

// Print the addresses
for (i = 0; i < 5; i++) {
    printf("&vowels[%d]: %u, pvowels + %d: %u, vowels + %d: %u\n", i, &vowels[i], i, pvowels + i, i, vowels + i);
}

// Print the values
for (i = 0; i < 5; i++) {
    printf("vowels[%d]: %c, *(pvowels + %d): %c, *(vowels + %d): %c\n", i, vowels[i], i, *(pvowels + i), i, *(vowels + i));
}

我正在学习learning-c.org上的教程。关于数组和指针的部分,如果我在系统上运行它们,示例程序的前两行将发出警告:char vowels [...

c types casting
2个回答
2
投票

使用&vowels,您将获得一个指向数组本身的指针,该指针的类型为char (*)[5],如错误消息中所述。您似乎想要的是指向数组中first element


0
投票
printf("&vowels[%d]: %p, pvowels + %d: %p, vowels + %d: %p\n", i, (void *) &vowels[i], i, (void *) (pvowels + i), i, (void *) (vowels + i));
© www.soinside.com 2019 - 2024. All rights reserved.