簡體   English   中英

如何在主函數中打印字符數組的內容,該函數的基地址由函數通過字符指針返回?

[英]How to print the contents of a character array in the main function whose base address is returned by a function through a character pointer?

我試圖通過在另一個函數返回的字符指針中接受該數組的基地址來打印主函數中的字符數組的內容。 實際上,這里的代碼是接受帶有元音的字符串,並返回不帶元音的修改后的字符串。 但是當我在main函數中打印字符數組時,代碼不打印任何內容。 可以使用字符串類來做,但是我想知道使用字符指針時出現了什么問題。

    #include<iostream>
    #include<string.h>
    using namespace std;
    char * print(char * s)
    {
        int j=0,len;
        while(s[j]!='\0')
           j++;
        len=j;
        char scopy[len];
        char * sn;
        j=0;
        for(int i=0;i<len;i++)
        {
            if(s[i]!='a' && s[i]!='e' && s[i]!='i' && s[i]!='o' && s[i]!='u' && s[i]!='A' && s[i]!='E' && s[i]!='I' && s[i]!='O' && s[i]!='U')
            {
                scopy[j]=s[i];
                j++;
            }
        }
        sn=scopy;
        return sn;
    }
    int main()
    {
        int n;
        cout<<"enter n:\n";
        cin>>n;
        char st[n];
        cout<<"enter string:\n";
        cin>>st;
        char * ps=print(st);
        cout<<"the string is\n"<<ps[0]<<ps[1]<<ps[2]<<"\n";  //Here when i print the array contents individually using the base pointer, it prints successfully
        for(int i=0;ps[i]!=NULL;i++)  //the problem is here, it does not print anything
           cout<<ps[i];
    } 

您的代碼將調用Undefined Behavior ,因為它返回一個指向局部變量的指針,該局部變量將在函數終止后立即超出范圍:

char * print(char * s)
{
    ...      
    char scopy[len];
    char * sn;
    ...
    sn=scopy;
    return sn;
}

此外,您不對字符串進行空終止,然后執行以下操作:

for(int i=0; ps[i]!=NULL ;i++)
     cout << ps[i];

ps不是以null結尾的,因此ps[i] != NULL將始終為true。


由於您使用的是C ++,因此我強烈建議您使用std::string ,而不要使用C風格的字符串。

暫無
暫無

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

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