2012-01-28 183 views
0

編輯:我瞭解字符串和內存使用C現在的工作,這個問題是由於惡劣的理解如何從C中的字符數組中獲取字符串?

我有一個字符緩衝區,其大小爲64元。數據被另一個函數放入。我想獲得不等於null的數組的所有元素。

爲了更好地解釋它,這裏是一個例子(僞碼)

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

幾件事情,一個字符不能爲null ,所以我會假設你的意思是\ 0。你的意思是所有字符到第一個\ 0或不是\ 0的數組中的所有字符?如果你的意思是所有不是\ 0,爲什麼char [4]不包含在getString結果中? – 2012-01-28 10:23:33

+0

所有字符到第一個\ 0 – liamzebedee 2012-01-28 10:25:14

回答

3

C中的字符串由字符數組表示。這些字符串由null(終止)字符終止。所以如果你手動構建一個字符數組,那麼就沒有辦法「從字符數組中獲取字符串」,因爲它已經是字符串了。

#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; 
} 

功能如printf通過此陣「運行」,直到他們發現結束符,這就是爲什麼「X」不會得到輸出在我的例子的原因。

+0

感謝您對於C/C++業餘愛好者,主要是託管代碼環境,這樣做更有意義 – liamzebedee 2012-01-28 10:38:18

+1

當您的意思是''\ 0''時不要使用NULL。 – 2012-01-28 10:42:20

+0

@LihO NULL是一個指針常量。它只會與(int)0相同,因爲當必須將指針作爲整數計算時,C編譯器將NULL指針轉換爲(int)0。雖然效果看起來像是一樣,但涉及到不同的概念。 (char)0的符號常量是NUL(一個L)。 [而這種含糊不清是我不喜歡C的原因之一] – Rudi 2012-01-28 13:43:35

1

char[]在它可以用於任何一個空終止字符串char*預計,所以只是使用它原樣空元件是。

0

我真的不認爲你想要實現一個緩衝區或任何需要它,當你可以使用字符串或字符數組。

但這裏是如果u想嘗試ü可以做:

#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; 
} 

用於檢查諮詢頁面所需單個字符函數: http://www.cplusplus.com/reference/clibrary/cctype/

相關問題