C语言字符串和字符数组有什么区别,怎么定义空的字符串和字符数组

比如现在有字符串 *a="abcd" ;*b="bcdef" 。我想要定义一个空的字符串或者字符数组C来储存接收到的字符串;然后让字符串C分别与字符串a和b进行比较看是否相等。
那C是定义为字符串还是字符数组呢?最好可以用strcmp函数比较的
注意::不是字符串数组

谢谢各位

首先,C必然定义为字符数组,C语言没有定义字符串的关键字,C语言用字符数组处理字符串。如果需要动态长度字符串必须用字符指针实现。我写了一个类似的程序。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void) {
const int SIZE_INC=16;
char *a="abcd";
char *b="bcdef";
char *astr, *cptr;
char ch, ich;
int csize=0, cread=0;
// 读入未知长度字符串,以回车或者EOF结束
printf("Input a string:\n");
cptr = astr = (char *)malloc(SIZE_INC);
csize = SIZE_INC;
ich = getchar();
for (;;) {
if (ich == '\n' || ich == EOF)
ch = '\0';
else
ch = ich;
if (cread == csize) {
astr = (char *)realloc(astr, csize + SIZE_INC);
csize += SIZE_INC;
cptr = astr + cread;
}
*cptr = ch;
if (ch == '\0') break;
cread++; cptr++;
ich = getchar();
}
if (!strcmp(astr,a))
printf("The string you input equals string a.\n");
else if (!strcmp(astr,b))
printf("The string you input equals string b.\n");
else
printf("Your string is: %s\n",astr);
system("pause");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-21
字符串和字符数组还是有一点区别的:字符串必须以'\0'结尾,而字符数组则不一定,不过如果你用字符串来初始化字符数组时,'\0'也会被加到数组结尾,所以数组长度是字符串长度+1
你所说的情况应该两个都可以用。
第2个回答  2011-04-21
定义一个字符数组,这是一个简单有效的方法,其实操作一般都是针对地址进行的
第3个回答  2011-04-21
字符串 会有结束符,字符数组没有.
第4个回答  2011-04-21
字符串一定是以\0结尾的,字符数组就不一定了。
对于上面的问题,你要定义一个指针。即字符串,而不是字符数组。
#include<stdio.h>
int myCompare(char *receive,char *aOrb)
{
return strcmp(receive,aOrb);
}
int main()
{
char *a="abcd",*b="bcdef";
char *receive=(char *)malloc(100);
/*或者char receive[100];*/
scanf("%s",receive);
if(myCompare( receive,a)==0)
{
printf("接受到的和a相等");
}
if(myCompare( receive,b)==0)
{
printf("接受到的和a相等");
}
getch();
return 0;
}追问

程序中C是用来接收字符串的,通过中断接收。但是每次进入中断就只能存储一个字符,当把整个字符串接收完毕时才进行比较。
现在不解的是:怎么定义个空的字符串(长度不定)或者数组-------然后每次中断存储一个字符--------如何判断字符串接收完毕了(重点)
非常感谢

第5个回答  2011-04-21
int len = strlen(a)+strlen(b)+1;
char *str =(char *)malloc(len);
if(str !=NULL)
{
memset(str,0,len);
strcpy(str,a);
strcat(str,b);
if(strcmp(str,a) ==0)
{}
else if(strcmp(str,b)==0)
{}
}追问

其实我是希望C用来储存输入的字符;
rdata[ByteSize]=UDR; //UDR为接收到的字符,UDR一次只传输一个字符!!
ByteSize++;
if(rdata[ByteSize]=='\0') \\接收结束时进入比较。请问这里有错吗?
{
if(strcmp(rdata,Get_Data)==0)
flag=1;
if(strcmp(rdata,Transmit_On)==0)
.............
那如果是定义一个空的字符数组呢?怎么定义

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网