C语言中的Strcat()...传递`strcat'的arg 2从没有强制转换的整数生成指针

时间:2014-03-30 22:46:06

标签: c

使用此函数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;

2 个答案:

答案 0 :(得分:2)

您的问题似乎是您实际上没有编写itoa函数,而您只是假设编译器有一个可用。不幸的是,编译器没有。 itoa不是C标准或POSIX标准的一部分,它可能也不是任何其他主要标准的一部分。但是,由于向后兼容性问题,C编译器在遇到对尚未声明的函数的引用时不会抱怨;它只是假设函数的参数匹配传递给它的类型,并且函数返回int 。因此,虽然您可能认为itoa返回char*,因为您从未实际定义它,编译器会认为它返回int,导致您尝试通过时显示的错误消息假定intstrcat

最简单的解决方案是定义自己的itoaSee 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));