[英]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.