2017-03-29 3 views
-1
#include<iostream> 

#include<string>  
using namespace std; 

char *fun(const char* a) 
{ 
     int size=strlen(a); 

     char* str=new char[12]; 

     for(int i=0;i<size-1;i++) 
     { 
       str[i]=a[size-i-1]; 
     } 

     str[size-1]='\0'; 

     return str; 
} 

main() 
{ 
     int i=0; 

     char a[11]={'a','y','u','s','h','r','i','k','h','r','a'}; 

     char *p=new char[11]; 

     p=fun(a); 

     for(int i=0;i<11;i++) 
     { 
       cout<<p[i]<<" "; 
     } 

     delete(ptr); 
} 

//ここで主に配列pを使用していくつかのトラブルがある場合は、ここをクリックしてください。したがって、strlenfunでそれを使用することはできませんa配列はNULが終了していません。ここ関数の中で使用される配列をmainの動的に割り当てられた配列に渡す方法は?


、::ここで

char a[11]={'a','y','u','s','h','r','i','k','h','r','a'}; 

あなたが配分されている

+2

正しくコードをフォーマットしてください、と_every_行の後に余分な空白行を入れないでください:


は、あなたはおそらくこれが欲しいです。そして、配列p_を使っていくつかの問題を抱えても問題はありません。 –

+1

'char * p =新しいchar [11]; p = fun(a); 'これはメモリリークの良いレシピです。いくつかのメモリを割り当てて、すぐに 'p'を他の場所に置いて、そのメモリの割り当てを解除することはできません。 – chris

+2

問題がある...それは知られています...どのような問題が...それは知られていません。 –

答えて

1

は多くの問題があります固定サイズは12ですが、文字列の長さに応じて動的サイズが必要です。

char* str=new char[12]; 

その後:

str[size-1]='\0'; 

は次のようになります。

str[size] = '\0'; 

そうしないと、結果の文字列は、最後の文字を欠場します。メインで


:あなたは右p=fun(a);と後pを割り当てるため

char *p=new char[11]; 

は無意味です。


あなたはdelete(ptr);を呼び出すが、ないptrはありません。


そして最後に、あなたはまた、#include <string.h>strlenが定義されていることを確認する必要がありますが、それは1 #include <string.h>なしもコンパイルし、いくつかのプラットフォーム。

#include <iostream> 
#include <string> 
#include <string.h> 

using namespace std; 

char *fun(const char* a) 
{ 
    int size = strlen(a); 
    char* str = new char[size + 1]; 

    for (int i = 0; i < size; i++) 
    { 
    str[i] = a[size - i - 1]; 
    } 

    str[size] = '\0'; 
    return str; 
} 

int main() 
{ 
    char a[] = "ABCDE";  
    char *p = fun(a);  
    int size = strlen(p); 

    for (int i = 0; i < size; i++) 
    { 
    cout << p[i] << " "; 
    } 

    delete[] p; 
} 
+1

str [size - 1] = '\ 0'; 'be 'str [size] =' \ 0 ';'? – wally

+0

@Muscampesterはい、もちろん、私はこれを見落としました。 –

+0

上記のコードをコンパイルしようとすると、strlenにエラーが宣言されていません。ここに何もないのですか? 'g ++ cc.cpp cc.cpp:関数 'char * fun(const char *)'内: cc.cpp:8:22:エラー: 'strlen'がこのスコープ内で宣言されていません int size = strlen a); ^ cc.cpp:関数 'int main()'内: cc.cpp:24:22:エラー: 'strlen'がこのスコープで宣言されていませんでした int size = strlen(p); ' – LethalProgrammer

関連する問題