具有此函数strcat()的转换错误
// split the block
for (i=0; block_size <= first_buddy_size/2; ++i) {
first_buddy_size/=2;
response[i] = strcat("F", itoa(first_buddy_size, buff, 10));
}
response[i] = strcat("A", itoa(block_size, buff, 10));我所犯的错误
buddy.c: In function `process_request':
buddy.c:49: warning: passing arg 2 of `strcat' makes pointer from integer without a cast
buddy.c:51: warning: passing arg 2 of `strcat' makes pointer from integer without a cast我的声明
block buddy_block[BUDDY_SIZE];
char* response[BUDDY_SIZE] = {0};
first_buddy_size = buddy_block[0].data;发布于 2014-03-30 22:56:49
char * strcat ( char * destination, const char * source );
上面是strcat的定义,第一个参数是指向目标数组的指针,它应该包含一个C字符串,并且足够大以包含连接的结果字符串。
所以在你的代码中:
strcat("F", itoa(first_buddy_size, buff, 10))第一个参数是错误的,"F“是一个const字符串,不能修改。
应该是这样的:
char str[MAX_SIZE] = {0};
str[0] = 'F';
strcat(str, itoa(first_buddy_size, buff, 10));发布于 2014-03-30 23:03:59
您的问题似乎是您还没有实际编写itoa函数,而且您只是假设编译器有可用的一个函数。不幸的是,编译器没有。itoa不是C标准或POSIX标准的一部分,它可能也不是任何其他主要标准的一部分。但是,由于向后兼容性问题,C编译器在遇到未声明的函数的引用时不会抱怨;它只会假设函数的参数与传递给它的类型匹配,并且函数返回一个int。因此,虽然您可能认为itoa返回一个char*,因为您从未真正定义过它,但是编译器会认为它返回一个int,导致在尝试将假定的int传递给strcat时显示的错误消息。
最简单的解决方案就是定义您自己的itoa。有关如何提供建议,请参阅此常见问题条目。
https://stackoverflow.com/questions/22750909
复制相似问题