簡體   English   中英

將ac字符串復制到char數組中

[英]copy a c string into a char array

C語言的新手,仍然可以掌握指針。 我正在嘗試將ac字符串的副本添加到char數組中,以便

char temp[40];
temp[0] = 'a';
temp[1] = 'b';
temp[2] = 'c';
temp[3] = NULL;
char *container[40] = {0};
strcpy(container[0], temp);
cout << container[0] << endl;

打印“ abc”。 嘗試進行復制是因為temp不斷被新字符替換,並且指向temp的指針顯然無法滿足要求,因為我想在打印abc后執行此操作。

char temp[40];
temp[0] = 'd';
temp[1] = 'e';
temp[2] = 'f';
temp[3] = NULL;
char *container[40] = {0};
strcpy(container[1], temp);
cout << container[1] << endl;

打印'def'。 附言:這是我到目前為止所擁有的,但是沒有用。 我不太確定即時通訊是否正確使用了strcpy,但是任何替代方法都會有所幫助。

您正確使用了strcpy ,但是沒有給它適當的內存。 這就是您的兩個程序都具有未定義行為的原因-它們將寫入未初始化指針所指向的內存。

要解決此問題,請使用malloc將內存分配給container每個元素:

char temp[40];
temp[0] = 'a';
temp[1] = 'b';
temp[2] = 'c';
temp[3] = NULL;
char *container[40] = {0};
container[0] = (char*)malloc(strlen(temp)+1);
strcpy(container[0], temp);
cout << container[0] << endl;

您需要在strlen的結果中加1 ,以適應C字符串的空終止符。 注意,僅因為使用C ++,才需要進行malloc 在C語言中,可以刪除malloc前面的類型轉換。

注意:我假設這是一個學習練習,以學習使用“原始”指針的方法,因為C ++提供了更好的處理字符串的工具。 特別是,您的容器可以替換為std::vector<std::string> ,當您向其中添加項目並管理其自身的內存時,它會動態增長,從而消除了使用mallocstrcpy的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM