簡體   English   中英

Strcat,2個指針的char數組

[英]Strcat, 2 char arrays of pointers

我有這樣的功能,將2數組作為char參數,我需要合並此字符串。 很抱歉提出一個簡單的問題。

    void Abc (char **a, char **b)
{

    for (int i = 0; i < 200; i++)
    {
        a[i]="hello ";
    }

    for (int i = 0; i < 200; i++)
    {
        strcat(a[i], b[i]);       //doesn't show mistake, but it's there
        cout << b[i]<<'\n';        //ok
        cout << a[i]<<'\n';        //ok
        cout<<strlen(b[i])<<'\n';  //ok
        cout<<strlen(a[i])<<'\n';  //ok
    }
}

為什么Strcat在這里不起作用? 我該怎么做才能使這項工作?

問題在以下語句中。

a[i]="hello ";

無需復制字符串文字,而是分配其地址。

改用

strcpy( a[i],"hello " );

首先,每個a[i]都指向一個字符串文字,對其進行修改將調用未定義的行為

其次,當您使用strcat(x, y) ,應確保x具有足夠的空間來存儲合並的xy

因此, x應該分配了內存,並且要仔細檢查,應該使用strncat避免意外的溢出。

這是您問題的根源:

for (int i = 0; i < 200; i++)
{
    a[i]="hello ";

編譯器在這里不知道您的意圖,因此為a[]每個元素分配了一個指向相同字符串的指針

a [0] == a [1] == a [2] == a [3] == a [4] == ... a [199]

即使這行得通,問題是now的所有元素都指向一個大小為7 {'h', 'e', 'l', 'l', 'o', 0}的char數組。 你不能stract到他們的結束。

您需要確保a[]每個元素都有一個指向唯一存儲空間的指針,並且它的大小足以容納您的字符串。 如果您的a[]元素已經指向有效的地方,那么您需要做的是:

for (int i = 0; i < 200; i++)
{
    strcpy(a[i], "hello ");
}

暫無
暫無

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

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