linux 初始化整数指针,警告:赋值从指针生成整数而不进行强制转换。(warning: assignment makes integer from pointer without a cast. w...

警告:赋值从指针生成整数而不进行强制转换。(warning: assignment makes integer from pointer without a cast. whats wrong?)

我收到了这个警告“警告:赋值从指针生成整数而没有强制转换”! 我想弄清楚这是什么意思? 我需要改变我的想法create_rectangle .....谢谢。 任何帮助赞赏

struct point {

int x;

int y;

};

struct rectangle {

struct point upperleft;

struct point lowerright;

char label[NAMESIZE + 1];

};

和我的代码:

struct rectangle *create_rectangle(struct point ul, struct point lr,

char *label) {

struct rectangle *r = malloc(sizeof(struct rectangle));

r->upperleft=ul;

r->lowerright=lr;

r->label[NAMESIZE+1]= strncpy(r->label,label,NAMESIZE);

//here is the warning

r->label[NAMESIZE] = '\0';

return r;

}

I got this warning "warning: assignment makes integer from pointer without a cast"! I want to figure out what does it mean? And what i need to change in my fucntion create_rectangle..... Thank you. Any help appreciated

struct point {

int x;

int y;

};

struct rectangle {

struct point upperleft;

struct point lowerright;

char label[NAMESIZE + 1];

};

and my code:

struct rectangle *create_rectangle(struct point ul, struct point lr,

char *label) {

struct rectangle *r = malloc(sizeof(struct rectangle));

r->upperleft=ul;

r->lowerright=lr;

r->label[NAMESIZE+1]= strncpy(r->label,label,NAMESIZE);

//here is the warning

r->label[NAMESIZE] = '\0';

return r;

}

原文:https://stackoverflow.com/questions/21489255

更新时间:2020-01-24 20:50

最满意答案

strncpy返回一个指向char的指针。 (实际上,您将其分配给非法地址,因为r->label[NAMESIZE+1]超出了数组的范围。)

它应该是

struct rectangle *create_rectangle(struct point ul, struct point lr,

char *label) {

struct rectangle *r = malloc(sizeof(struct rectangle));

r->upperleft=ul;

r->lowerright=lr;

strncpy(r->label,label,NAMESIZE);

r->label[NAMESIZE] = '\0';

return r;

}

strncpy returns a pointer which you are assigning to a char. (Actually, you are assigning it to an illegal address as r->label[NAMESIZE+1] is beyond the bounds of the array.)

It should be

struct rectangle *create_rectangle(struct point ul, struct point lr,

char *label) {

struct rectangle *r = malloc(sizeof(struct rectangle));

r->upperleft=ul;

r->lowerright=lr;

strncpy(r->label,label,NAMESIZE);

r->label[NAMESIZE] = '\0';

return r;

}

2014-01-31

相关问答

纠正这个: socket = tcp_socket; 至 socket = tcp_socket(); tcp_socket()是函数调用,而tcp_socket是指向内存中函数位置的指针。 Correct this: socket = tcp_socket; to socket = tcp_socket(); tcp_socket() is a function call, while tcp_socket is a pointer to the function location in mem

...

在以下任务中 - result[0][index + 1] = "\0"; // 1

result[1][index] = "\0"; // 2

使用单引号' '而不是双引号。 ""用于字符串文字,其中result[1][index]和类似char是char ,因此,您会收到警告。 result[0][index + 1] = '\0'; /*

In this following assignment - resu

...

您的系统似乎将NULL定义为类似(void *)0 。 这意味着你的任务正在执行警告所说的 - 从没有强制转换的指针生成一个整数。 您不希望将NULL放入char变量中 - 您可能正在寻找: *s2 = '\0';

Your system appears to have NULL defined as something like (void *)0. That means your assignment is doing just what the warning says - making

...

您必须取消引用argv两次以获取char值numbers[i] = *(*(argv + i)); You have to dereference argv twice to get the char value numbers[i] = *(*(argv + i));

strncpy返回一个指向char的指针。 (实际上,您将其分配给非法地址,因为r->label[NAMESIZE+1]超出了数组的范围。) 它应该是 struct rectangle *create_rectangle(struct point ul, struct point lr,

char *label) {

struct rectangle *r = malloc(sizeof(struct rectangl

...

我不确定这是如何导致转换错误的,但我确实在您的代码中看到错误。 第一次调用strtok会初始化token'izer,因为你传递了一个缓冲区。 第二个调用,假设您希望它找到下一个标记,应该具有空值而不是相同的缓冲区。 看看这个例子...... 所以你想要的是: ...

int i=0;

str = strtok(buffer, " ");

do {

argv[i] = str; //**This line causes the warning!

...

} wh

...

如果hashtable是整数数组,则hashtable[i]需要一个整数, NULL是一个指针。 因此,您尝试将指针值分配给整数变量(没有-Werror转换),这通常只是一个警告,但由于您有 - -Werror所有警告都会变成错误。 只需使用0而不是NULL 。 If hashtable is an array of integers then hashtable[i] expects an integer and NULL is a pointer. So you're trying to as

...

如果你想让编译器静音,你必须添加类型转换(即使它通常是一个坏主意,这是你的编译器如何转换它)。 ssize_t *sys_call_table = (ssize_t *)0xc0026e04;

typedef ssize_t (*ftype)(const char *, int);

ftype orig_open;

ssize_t hacked_open(const char *pathname, int flags)

{

printf("SYS_OPEN called : %s\n

...

好吧,让我把它放在上下文中...... struct gdt_ptr

{

unsigned short limit;

unsigned int base;

} __attribute__((packed));

struct gdt_entry gdt[3];

struct gdt_ptr gp;

gp.base = &gdt;

您正在为整数( gp.base )分配指针( &gdt ) - 因此错误:-) 我怀疑你真的想要(或类似的东西): struct gdt_ptr

{

...

函数FindFirstVolume是未声明的,这使得编译器假设它返回int ,而实际上它应该返回HANDLE 。 你得到的警告特指你试图隐式地将int返回值转换为HANDLE类型( HANDLE实际上是指针类型)。 很可能在某些条件编译指令中隐藏了Windows API头中的FindFirstVolume声明。 您可能需要#define _WIN32_WINNT 0x0500来“启用”该函数的声明。 加 #define _WIN32_WINNT 0x0500

在包含Windows API标头之前

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值