2012-01-28 180 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/

相关问题