我的编译器(gcc)显示警告
#include<stdio.h>
struct s{
unsigned char *p;
};
int main() {
struct s a = {"??/??/????"}; //warning
printf("%s",a.p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
警告:初始化中的指针目标在签名方面有所不同
请帮我解释为什么会出现此警告.
Set*_*gie 22
字符串文字不是类型unsigned char*.
你可能想输入const char*你的结构.如果没有,您可能不希望在不创建字符串的情况下为其分配字符串文字const,因为修改字符串文字所在的内存是非法的.
正如@Seth Carnegie所说,字符串文字是类型char*,而不是unsigned char*.因此,您可以使用显式类型转换来避免此警告.即
#include<stdio.h>
struct s{
unsigned char *p;
};
int main() {
struct s a = {(unsigned char *)"?""?/?""?/????"}; // no warning
printf("%s",a.p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:更改字符串文字以删除可能的三字母
| 归档时间: |
|
| 查看次数: |
48885 次 |
| 最近记录: |