使用此函数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;
答案 0 :(得分:2)
您的问题似乎是您实际上没有编写itoa
函数,而您只是假设编译器有一个可用。不幸的是,编译器没有。 itoa
不是C标准或POSIX标准的一部分,它可能也不是任何其他主要标准的一部分。但是,由于向后兼容性问题,C编译器在遇到对尚未声明的函数的引用时不会抱怨;它只是假设函数的参数匹配传递给它的类型,并且函数返回int
。因此,虽然您可能认为itoa
返回char*
,因为您从未实际定义它,编译器会认为它返回int
,导致您尝试通过时显示的错误消息假定int
为strcat
。
最简单的解决方案是定义自己的itoa
。 See this FAQ entry for advice on how.
答案 1 :(得分:1)
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));