qyhf.net
当前位置:首页 >> 关于C语言字符串的问题。32位和64位下输出结果不一样。 >>

关于C语言字符串的问题。32位和64位下输出结果不一样。

i为4,*p=s+3;p++; p-i,*p=s printf("%s\n",p-i);是输出一个字符串,这个字符串从数组s开始,直到这个数组结束完,数据的结束标志和字符串是一样的,故可到数组最后一个最就不打下面的字符了.

因为s是一个指针变量,32位机中的任何类型的指针变量都是4字节

1. 因为printf函数在%s控制下是将对应变量解释为指针,而且从指针这个地址开始一个字符一个字符地把它们依次显示在屏幕上,直到遇到一个'\0'为止,但不输出'\0'.2. printf("%s\n",*word);word是指针,即一个地址,*word是word地址中

假设你的结构变量为s,用s.a去访问那个字符串即可.printf("%s", s.a);就可以打印了

array[j]!='\0'是一个不确定条件,因为数组中没有这个值,所以j会一直加,直到遇到空,然而哪里有空,谁也不知道.

输出结果:c language 解释:#if LETTER if(c>='a'&&c #else if(c>='A'&&c #endif 这段是指当LETTER的值为真(非零)时执行第一个程序段if(c>='a'&&c='A'&&c这里宏定义#define LETTER 0已将LETTER的值置为0,故执行第二个程序段,即把A到Z中的大写字母转换为小写字母(小写字母的ASCII码比大写字母的大32),其他不变,所以C Language变成了c language.

楼上的没有解决问题 楼主的问题主要是puts引起的,puts输出是遇到结束符后才结束的,所以输出的后面会出现乱码的现象(未知字符) 解决这个问题非常简答,就是在c数组转换完毕后添加一个结束符 修改如下: #include #include void main() { int i,l; char ch[10],c[10],*p; gets(ch); l=strlen(ch); puts(ch); p=ch l-1; for(i=0;i 评论0 0 0

因为char c[4] = {'a', 'b', 'c', 'd'}; 是将4个字符放入四个内存空间,它并不能看成是一个字符串,而%s的输出是要读到”\0“才会结束,你的这个数组里面没有,所以会出现一些乱码,而当你定义为 c[5]时,最后一个空间自动填充一个NULL,所以%s输出会正常.你改了d[] 之后同样是多了一个”\0“,但是为什么之前会出现两边abcd我就不清楚了,

scanf() --> array1[3]scanf() --> index[4]printf()

因为你调用的是puts这个函数,这个函数会自动给你添加1个换行符,如果你的字符串里有换行符再用这个换行符就会换行2次了 字符串数组都以'\0'结尾,如果你没加会给你自动加前提是按"asdsa"这样双引号的形式,自动换行是puts的原因如果你用printf就不换行了 char c[]={'H','i','\0'};跟char c[]={'H','i'}; 前面一个是字符串 后面一个是字符数组不是字符串因为没有显示的'\0',看你要字符串还是字符串数组了.

网站首页 | 网站地图
All rights reserved Powered by www.qyhf.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com