C语言字符串问题

作者&投稿:只仲 (若有异议请与网页底部的电邮联系)
c语言 字符串问题~

scanf("%c",(p+i));中的控制符是%c,说明这个scanf("%c",(p+i));是接收“字符”的。那么你有办法输入'\0'吗?只要你有办法输入'\0',就能执行if(*(p+i)=='\0')
break;,可惜你没有办法输入'\0'!把它改成if(*(p+i)=='#')
break;,当输入‘#’时就break了,再用一句*(p+i)='\0';,在最后补一个'\0'。

A,还要算上字符串结束符,所以数组大小至少要是6
B,没有字符串结束符,不是字符串,题目要求是字符串,不合题意
D,指针s没有赋值,是一个也只剩,输出的内容不定

1. 字符串初始化,如果逐个赋值的话,系统不一定会自动添加'\0',除非指定了长度且指定的长度大于等于你赋值的字符的个数加1,即最小为你赋值的字符个数加1。假设你指定的字符个数为n,长度为len,则系统会将剩下的(len-n)个元素都赋值为'\0',当n等于len时,不会添加任何'\0'。
之所以出现图1的情况,是因为当前栈顶刚好等于(纯粹是碰巧)'\0',假设当前栈顶为100,则有[100]='\0';,而为m_str分配内存时,栈顶要减4,因为栈设计成了先自减(即分配内存)后入栈,于是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';m_str赋值为地址96,当前栈顶为96。当为u_str分配内存时,栈顶又要减4,于是[100]='\0';[99]='P';[98]='O';[97]='T';[96]='S';[95]='P';[94]='O';[93]='T';[92]='S';u_str赋值为地址92,当前栈顶为92。当计算m_str的长度时会从最低96开始,一直计算到99(遇到第一个'\0'前停止),所以m_str的长度为4,同理,计算u_str的长度时会从92开始,一直计算到99,所以其长度为8,从以上分析中显然可以看出,这两个字符串是不相等的,所以strcmp返回-1。
图2就不用过多解释了,手动添加了'\0',输出自然是那样的。又由上面对于图1的解释,要分析出出现图3和图4的原因,也是很容易的了,这里也不解释了。

字符串初始化,如果逐个赋值的话,系统不是会自动添加'\0'吗

不是。

图一就是长度为4的数组,图二长度为5

图三会是添加\0,但是是会把后面所有的都设为\0

因为图一和图四不以\0结尾,所以不能用strlen和strcmp,会越界

图四也可以用char str[4] = "stop"这样赋值。如果不手动加长度就会是5了。



我也试了一下,没问题,你到底是什么问题,是要在s1或s2中输入空格吗?那么用gets函数;
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。
其调用格式为:gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s:",&s)/* scanf("%s",s) */相似,但不完全相同,使用scanf("%s",&s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
你改为:
#include<stdio.h>
void main()
{ char s1[50],s2[50];
gets(s1);
gets(s2);
printf("%s\n",s1);
printf("%s\n",s2);
}
这样就用回车表示输入结束

char *p1="abcd", *p2="ABCD", str[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));//将p2+1连接到p1+2后面,再拷贝到str+2里面
printf("%s",str);//p1+2
为cd
//p2+1
为BCD
strcat(p1+2,p2+1)

cdBCD
str+2
为z
strcpy(str+2,strcat(p1+2,p2+1))//
为xycdBCD
此处z被覆盖了

p1
p2
str
记录的都是字符串的首地址
strcat拼接字符串,
p1位置是‘a’,+2,后移2个
到'c'
得到cd
p2位置是‘A’,+1,后移1个
到'B'
得到BCD
拼接为
cdBCD
strcpy复制字符串
str位置是'x'
+2
后移2个
到‘z’位置
从‘z’位置开始复制,cdBCD就替换了“xyz”
从z以后的所有
所有就得
xycdBCD


c语言字符串结尾的问题?
!='\\0'.就是运行到字符串结尾时结束。!的意思是非,亦可以理解成不。‘\\0’是字符串的结束符号,由编译器自动加上。比如说,把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\\0' 这后面的'\\0...

C语言字符串反斜杠表示问题
"\\"是转义符。C中定义了一些字母前加"\\"来表示常见的那些不能显示的ASCII字符,如\\0,\\t,\\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没...

C语言:字符串输入与输出相关问题
以下是示例代码,需要说明的一点是gets输入字符串对于字符串长度没有限制,可能导致越界溢出,不安全,建议改用fgets,另外在新的微软标准中gets函数已被gets_s函数代替,希望对你有帮助。include<stdio.h>intmain(){ const int count=21;charstr1[count];charstr2[count];charch;printf("请str1输入...

c语言问题,字符串?
该代码使用了STL中的vector、map等容器以及C++11中引入的random库,实现了任意关键词随机替换颜表情的功能。具体实现思路是先将关键词和颜表情建立映射关系,然后使用find函数在文本中查找关键词,找到之后将其替换为对应的颜表情。

c语言字符串提取与合成问题?
一、两个指针分别指向数组第一项和第二项,对应偶数项和奇数项,之后指针同时循环+2取值保存在对应数组。二、拼接字符串直接使用字符串函数strcat。(不想使用库函数,也可循环赋值)。include <stdio.h> include <string.h> define M 20 \/\/数组最大长度 int splitStr(char str[],char oStr[],...

C语言问题:将字符串a复制到字符串b中
1、首先需要建立一个新的文件,输入头文件和主函数。2、接下来需要定义变量类型。3、设置完变量类型之后开始调用cpy函数。4、接下来需要定义一个函数,并定义变量类型。5、最后加一个字符串结束符,并在主函数中输出。6、编译。运行,可以看到字符串a复制到字符串b中。

关于C语言字符串数组输入问题?
这当然不行啊,char *a[11];表示定义了11个字符型指针,每个指针还没有指向有存储空间的内存地址。如果想要能运行需要申请内存加上 a[0]=(char*)malloc(100);

关于C语言的字符串指针的问题?
如果输入12345,那么p指向1,即p中存放着1的地址。没有字符串的指针和指针指向的内容不能修改一说。无论什么类型的指针,只要是“常指针”就有三种情况不可改变:指针是常量——这个指针只能指向申明时指向的目标,不能指向别处。指向的内容是常量——不能通过这个指针改变指向的内容,但指针可以指向别处...

C语言字符串长度问题
sizeof(S)计算的是S这个指针所占的字节数,而不是计算那个字符串的长度,指针是一个变量,其实他是一个数值,只不是这个数值是代表的意思是计算中的地址而已,他的占字节数是4个,和int类型一样的

关于C语言字符串的问题求助
\\t\\018\\\\\\"12 当遇到转义字符'\\0'时,还要看其后面是否还有数字,若有,则应将后面的数字(一至二位)与前面的'\\0'相结合作为一个字符计入整个字符串的长度。0807\\07\\08可以拆成0 8 0 7 \\07 \\0 8 问:为什么\\08不在一起?答:\\0后面加数字说明是八进制,所以不能像前面一样把8放...

东平县17564708112: 一个C语言字符串输入问题 -
兀有垄爱活: 我也试了一下,没问题,你到底是什么问题,是要在s1或s2中输入空格吗?那么用gets函数;gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符. 其调用格式为:gets(s);其...

东平县17564708112: C语言中字符串连接怎么解决?? -
兀有垄爱活: 可以使用字符串连接函数strcat()函数,头文件是#include<string.h>; 举例如下:两个字符串char [100]="abc",b[50]="def"; 将其变为一个字符串并输出#include<stdio.h>#include<string.h> int main() { char a[100]="abc",b[50]="def"; ...

东平县17564708112: C语言连接字符串问题 -
兀有垄爱活: 正确答案:#include<stdio.h> main() { int i,j,k,l; char str1[10],str2[10],str3[20]; scanf("%s",str1); scanf("%s",str2); i=sizeof(str1); j=sizeof(str2); for(k=0;k<i;k++) { if(str1[k]=='\0') break; else str3[k]=str1[k]; } for(l=0;l<10;l++,k++) { if(str2[l]=='\0') // ●▽● ...

东平县17564708112: C语言字符串的小问题. -
兀有垄爱活: 1.不一定,sizeof(Wang.stNo)得到的并不一定是7,而是实际占用的字节数.2.应该是一样大.3.系统会自动识别,不用你管.4.就是0,别说是16进制或10进制,因为16进制的0和10进制的0是一回事.空字符串点一个字符的位置.

东平县17564708112: c语言关于字符串的问题,新手求教 -
兀有垄爱活: strcmp这个函数比较两个字符串大小,是按字符的ansii码进行比较的.strcmp(str1,str2),对str1和str2的每个字符进行比较,如果str1>str2,则strcmp的返回值大于0,反之返回值小于0.所以当楼主输入的str2是小写字符串是,那么str1是恒小于str2的,输出的永远是str2接在str1后面.另外如果输入大写字符串str2,当str2的首字符ascii码值大于H的ascii值时,(或者str2前几个字符于str1都相同,直到不同的字符出现,并且大于str1中相同位置的字符ascii值时),输出的也是str2接在str1后面了,楼主可以试试就知道了.

东平县17564708112: C语言字符串问题
兀有垄爱活: for( i=0; i<strlen(strInput); i++ ) { printf( "%c ", strInput[i] ); } printf( "\n" );

东平县17564708112: 问一个C语言字符串的问题
兀有垄爱活: 以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放.这句话的意思: 例:ashduinhgohhjsmngg 变为:ohhjsmnggashduinhg

东平县17564708112: 数据结构(C语言)中字符串的问题 -
兀有垄爱活: 空串 :里面是空 为NULL 空格串:里面是一个" " ASCLL=32 定义空串 : string a="";“空串”是无法输入,但可以使一串为空串 a="";

东平县17564708112: c语言字符串问题 -
兀有垄爱活: #include int main(void) { int flag = 0; char s[128]; gets(s); if (strstr(s, ".sch") != NULL) { flag = 1; } else { flag = 0; } printf("%d\n", flag); return 0; }

东平县17564708112: c语言中关于字符串的问题 -
兀有垄爱活: 输入输出是单字符的就用单引号,是数组或者二维表的时候就为双引号!

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