首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcat偏心行为

strcat偏心行为
EN

Stack Overflow用户
提问于 2011-08-16 12:42:15
回答 2查看 352关注 0票数 3

我编写了这个简单的C程序,但我不太明白strcat这个奇怪的行为

代码语言:javascript
复制
long sum(long col, char* path, char* path2){

    printf("%s\n",path2);
    strcat(path,".endlines");
    printf("%s\n",path2);
    return 0;
}

int main(int argc, char* argv[]) {
    int n=atoi(argv[1]);
    sum(n,argv[2],argv[3]);
    exit(EXIT_SUCCESS);
}

strcat被应用在path上,但是path2最终也被修改了。如果有人告诉我发生了什么,我会非常感激的:)谢谢

./Program3示例/mountdir/location2.csv示例/rootdir/location2.csv

产出:

示例/rootdir/location2.csv

端线

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-16 12:48:00

您正在溢出一个缓冲区。最初的argv2和argv3很可能是连续的。当您strcat到argv2的末尾时,它是写到内存argv3点上的。您需要分配新的缓冲区来保存您要创建的更大的字符串。

票数 6
EN

Stack Overflow用户

发布于 2011-08-16 12:55:45

首先,您不能写到argv2。(这样做会产生依赖于实现或未定义的行为。区别并不重要:不要这样做)。

第二,混乱在哪里?您可能在"example/mountdir/location2.csv\0example/rootdir/location2.csv".之后立即使用argv2部署了内存,因此看起来类似于argv1argv 2 指向第一个'e',path2指向空字节后面的'e‘。在strcat到path时,您从\0开始写入数据,因此\0被‘.’替换为'.','e‘被'e’替换为‘e’,等等,现在path2指向字符串'. endlines‘的第二个字符,因此可以打印它并获得输出“endline”。

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

https://stackoverflow.com/questions/7078349

复制
相关文章

相似问题

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