繁体   English   中英

C ++-我分配了一个char数组,内容为```b

[英]C++ - I have allocated a char array and the content is `�b

我想连接两个const char *,但是当我这样做时得到了以下符号:

我执行以下操作:

 char* path = new char[strlen(args->targetFileName) + strlen(args->targetFilePath)];
cout << path << endl;
strcat(path,args->targetFilePath);
cout << path << endl;
strcat(path,args->targetFileName);
cout << path << endl;

输出:

`�b
`�b/home/user/Arbeitsfläche/
`�b/home/user/Arbeitsfläche/Auto.png

有什么问题吗? 有什么建议么??

您尚未初始化path变量。 您已经为其分配了内存,但是它最初只包含垃圾,偶然有一个空值。 然后,您将字符串连接起来,因此您的路径将附加到垃圾箱中。 strcpy替换第一个strcat ,您应该是对的。

该数组包含未初始化的内存。 您的strcat正在搜索第一个0字节,并且不能保证它在哪里,甚至不存在任何字节(在这种情况下, strcat甚至会在分配的内存之后进行搜索,可能将被调用的UB称为崩溃)。

使用strcat时将第一个字节设置为0 ,或者更好的方法是使用C ++并使用std::string

学习使用调试器 (如Linux上的gdb )并要求编译器发出所有警告(如Linux上的g++ -Wall -g )。

您已分配但未填充数组。 尝试一下

 size_t targetfilenamelen = strlen(args->targetFileName);
 size_t targetfilepathlen = strlen(args->targetFilePath);
 char* path = new char[targetfilenamelen+targetfilepathlen+1]; // extra zero byte
 strcpy (path, args->targetFileName);
 strcat (path, args->targetFilePath);

更好的是,使用std::string例如

 std::string name(args->targetFileName);
 std::string path(args->targetFilePath);
 std::string res = name+path;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM