2012-01-28 40 views
0

EDIT:私は私のサイズが64個の要素であるchar型のバッファを持つCの文字列とメモリの仕事は今、この質問は悪い理解Cの文字配列から文字列を取得するにはどうすればよいですか?

によるものであったかを理解しています。データは別の関数によってデータに入れられます。私はnullと等しくない配列のすべての要素を取得したい。

nullで終わるchar*文字列が期待されている場所だけでそれを使用するので、それをよりよく説明するために、その中にヌル要素を持つここでの例(擬似コード)

char[5] data; 
data[0] = 'c'; 
data[1] = 'a'; 
data[2] = 't'; 
data[3]; // = null 
getString(data); // Should return "cat" 
+0

物事のカップル、charがNULLにすることはできませんここ

だがuは試してみたい場合はuは何ができるかでありますですから、\ 0を意味すると思います。最初の\ 0までのすべての文字、または\ 0以外の配列のすべての文字を意味しますか? \ 0以外のすべてを意味する場合、char [4]はgetStringの結果に含まれないのはなぜですか? –

+0

最初の文字までのすべての文字\ 0 – liamzebedee

答えて

3

Cの文字列は、文字の配列で表されます。これらの文字列はヌル(終了)文字で終了します。そのため、手作業で文字配列を作成すると、既に文字列であるため、文字配列から文字列を取得する方法はありません。この配列によってprintfの「実行」のような

#include <stdio.h> 

int main() 
{ 
    char data[5]; 
    data[0] = 'c'; 
    data[1] = 'a'; 
    data[2] = 't'; 
    data[3] = '\0'; // terminating character (avoid using NULL) 
    data[4] = 'x'; 

    printf("%s", data); // output: cat 
    return 0; 
} 

機能、彼らは「X」は、私の例では、出力に取得することはできません理由で文字を、終端見つけるまで。

+0

主に管理されたコード環境のC/C++アマチュアの方に感謝します。 – liamzebedee

+1

''\ 0''を意味するときには' NULL'を使用しないでください。 –

+0

@LihO NULLはポインタ定数です。 Cコンパイラはポインタを整数として評価する必要がある場合、NULLポインタを(int)0に変換するため、(int)0と同じにしか見えません。エフェクトは同じように見えますが、フードの中にはさまざまな概念があります。 (char)0の記号定数はNUL(1 L)です。 [そして、このあいまいさは私がCが好きではない理由の1つです] – Rudi

1

があるchar[]がれたまま、使用することができますです。

0

私は実際にバッファや文字列や文字配列を使用することができますようにそれのための任意のニーズを実装すると思います。

#include<iostream> 
#include<string> 
using namespace std; 

void main() 
{ 
    int n,pos=0; 
    char ch;  
    cout<<"\nEnter number of characters: "; 
    cin>>n; 
    char *ptr= new char[n]; 
    while(pos<n) 
    { 
    cout<<"\nEnter character: "; 
    cin>>ch; 
    cout<<"\nEnter position: "; 
    cin>>pos; 
    ptr[pos]=ch; 
    } 
    cout<<"\nNumber of Valid characters: "; 
    int count=0; 
    for(int i=0;i<n;i++) 
    { 
     if(isalnum(ptr[i])||ispunct(ptr[i])) 
     { 
      //add other single char function required from http://www.cplusplus.com/reference/clibrary/cctype/ according to your use 
      count++; 
     } 
    } 
    cout<<count<<endl; 
} 

ページを参照してください確認するために必要な単一CHAR関数のために: http://www.cplusplus.com/reference/clibrary/cctype/

関連する問題