簡體   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