首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中..。传递“`strcat”的arg 2使指针在没有强制转换的情况下从整数中生成

在C中..。传递“`strcat”的arg 2使指针在没有强制转换的情况下从整数中生成
EN

Stack Overflow用户
提问于 2014-03-30 22:46:06
回答 2查看 4.8K关注 0票数 1

具有此函数strcat()的转换错误

代码语言:javascript
复制
   // 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));

我所犯的错误

代码语言:javascript
复制
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

我的声明

代码语言:javascript
复制
 block buddy_block[BUDDY_SIZE];
 char* response[BUDDY_SIZE] = {0};
 first_buddy_size = buddy_block[0].data;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 22:56:49

char * strcat ( char * destination, const char * source )

上面是strcat的定义,第一个参数是指向目标数组的指针,它应该包含一个C字符串,并且足够大以包含连接的结果字符串。

所以在你的代码中:

代码语言:javascript
复制
strcat("F", itoa(first_buddy_size, buff, 10))

第一个参数是错误的,"F“是一个const字符串,不能修改。

应该是这样的:

代码语言:javascript
复制
char str[MAX_SIZE] = {0};
str[0] = 'F';
strcat(str, itoa(first_buddy_size, buff, 10));
票数 1
EN

Stack Overflow用户

发布于 2014-03-30 23:03:59

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

最简单的解决方案就是定义您自己的itoa有关如何提供建议,请参阅此常见问题条目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档