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