编辑:我现在理解字符串和内存在C中是如何工作的,这个问题是由于理解不好
我有一个char缓冲区,大小为64个元素。数据由另一个函数输入。我想得到数组中不等于null的所有元素。
为了更好地解释它,这是一个例子(伪代码)
char[5] data;
data[0] = 'c';
data[1] = 'a';
data[2] = 't';
data[3]; // = null
getString(data); // Should return "cat"
答案 0 :(得分: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”无法输出的原因。
答案 1 :(得分:1)
其中包含null元素的char[]
可用于预期以空值终止的char*
字符串的任何位置,因此只需按原样使用它。
答案 2 :(得分: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/