如何从C中的字符数组中获取字符串?
编辑:我了解字符串和内存使用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