編輯:我瞭解字符串和內存使用C現在的工作,這個問題是由於惡劣的理解如何從C中的字符數組中獲取字符串?
我有一個字符緩衝區,其大小爲64元。數據被另一個函數放入。我想獲得不等於null的數組的所有元素。
爲了更好地解釋它,這裏是一個例子(僞碼)
char[5] data;
data[0] = 'c';
data[1] = 'a';
data[2] = 't';
data[3]; // = null
getString(data); // Should return "cat"
編輯:我瞭解字符串和內存使用C現在的工作,這個問題是由於惡劣的理解如何從C中的字符數組中獲取字符串?
我有一個字符緩衝區,其大小爲64元。數據被另一個函數放入。我想獲得不等於null的數組的所有元素。
爲了更好地解釋它,這裏是一個例子(僞碼)
char[5] data;
data[0] = 'c';
data[1] = 'a';
data[2] = 't';
data[3]; // = null
getString(data); // Should return "cat"
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」不會得到輸出在我的例子的原因。
感謝您對於C/C++業餘愛好者,主要是託管代碼環境,這樣做更有意義 – liamzebedee 2012-01-28 10:38:18
當您的意思是''\ 0''時不要使用NULL。 – 2012-01-28 10:42:20
@LihO NULL是一個指針常量。它只會與(int)0相同,因爲當必須將指針作爲整數計算時,C編譯器將NULL指針轉換爲(int)0。雖然效果看起來像是一樣,但涉及到不同的概念。 (char)0的符號常量是NUL(一個L)。 [而這種含糊不清是我不喜歡C的原因之一] – Rudi 2012-01-28 13:43:35
甲char[]
在它可以用於任何一個空終止字符串char*
預計,所以只是使用它原樣空元件是。
我真的不認爲你想要實現一個緩衝區或任何需要它,當你可以使用字符串或字符數組。
但這裏是如果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/
幾件事情,一個字符不能爲null ,所以我會假設你的意思是\ 0。你的意思是所有字符到第一個\ 0或不是\ 0的數組中的所有字符?如果你的意思是所有不是\ 0,爲什麼char [4]不包含在getString結果中? – 2012-01-28 10:23:33
所有字符到第一個\ 0 – liamzebedee 2012-01-28 10:25:14