首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char[]和char*是否兼容?

char[]和char*是否兼容?
EN

Stack Overflow用户
提问于 2012-12-03 06:54:50
回答 4查看 114关注 0票数 1

从本质上讲,这段代码能工作吗?在你说“运行它看看!”之前,我刚刚意识到我的cygwin不是和gcc一起来的,它现在离重新安装只有40分钟了。这就是说:

代码语言:javascript
复制
char* words[1000];
for(int i = 0; i<1000; i++)
    words[i] = NULL;

char buffer[ 1024 ];

//omit code that places "ADD splash\0" into the buffer

if(strncmp (buffer, "ADD ", 4) == 0){
            char* temp = buffer + 4;
            printf("Adding: %s", temp);
            int i = 0;
            while(words[i] != NULL) i++;
            words[i] = temp;
}

我最不确定的是char* temp = buffer + 4这一行,也不确定我是否可以像现在这样给wordsi赋值当我最终尝试在40分钟内编译这段代码时,我会得到类型错误吗?

另外--如果可以,为什么不需要对words[]的每个元素使用malloc()呢?为什么我可以说words[i] = temp,而不是需要为临时长度的单词分配内存?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-03 07:05:43

这可能行不通,因为所有words[i]都将被设置为指向buffer + 4的相同位置。

然而,您的基本思想很好:您可以通过遵循相同的基本思想,将一个大的缓冲区“分割”成较小的“单词”。但是,您需要确保您没有指向缓冲区的相交区域,并且您所指向的单词所指向的区域以null结尾。

最后,每次遍历words[i]以查找下一个NULL的想法并不是最优的:您应该存储上一次写入的位置,在下一次写入时递增它,并删除while(words[i] != NULL)循环。

票数 0
EN

Stack Overflow用户

发布于 2012-12-03 06:57:42

在函数调用和指针运算中,char[]会衰减到char*

所以从表面上看,你的代码是有效的C。

编辑

至于你添加的问题,你可以做word[i] = temp,因为类型是兼容的。编译器只检查类型安全(好吧,它做了更多的工作,但是在为什么这是一个语法上有效的赋值的上下文中...)。

票数 0
EN

Stack Overflow用户

发布于 2012-12-03 07:00:07

在gcc上测试过,它可以工作,但是除非你使用的是c99编译器,否则你需要在for循环之外声明i。

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

https://stackoverflow.com/questions/13674839

复制
相关文章

相似问题

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