C语言字符串问题,高手请进,帮我看看,谢谢
是9
因为\\是转义字符\(\是转义字符 两个\\就是\本身)占一位
141就是141占3位
\141是字符a ,\后面是8进制数据 就是1*8*8+4*8+1=97就是小写字母a 占一位
abc三位
就是Tab的转义字符 占一位
1+3+1+3+1=9位
当然是零了。。。你调用length函数时,传过去的参数不是i,而是i的值,0;调用length时,会有新的i在length里;length调用完以后里面的东西都会销毁,这样length里的i就没有了;只剩下了main里的i,还是0.
所以,要这样:调用时:length(&i,a)
定义:char length(int *i,char a[]);(*i)++;
这样就是传过i的地址去,改变地址里的东西,那就行啦。
也可以把i弄成全局变量。在函数外部声明即可。
s占16个字节,其内容依次是
AAAABBBBCC\0\0DD\0\0 (\0表示内存中1个字节的二进制00000000)
而s[1]等价于 &s[1][0],即第一个字符B的地址。用%s输出时,当然是从B开始,一直在内存里找到\0为止。所以是 BBBBCC
"\"%s\"\n"中有两个\",表示字符串的内容里本身含两个双引号,故输出的完整结果是"BBBBCC"
有人认为"AAAA"末尾会自动加上\0,从而超过了4,不能用来初始化数组s. 这种观点在ANSI C制定之前是正确的。但是,ANSI C有了新的规定:当用双引号字符串去初始化char数组时,允许双引号中的字符个数等于数组大小。这时不会自动在被初始化的数组后面添加\0. 例如 char a[4]="AAAA"是合法的,但a[3](数组的最后一个字节)的下一个字节存放的是什么,则不确定,即strlen(a)是未知的。
#include <stdio.h>
main()
{
char s[4][5] = {"AAAA","BBBB","CC","DD"};
printf("\"%s\"\n",s[1]);
}
程序应该是这样的,输出"BBBB"。
个人认为:4行5列,s[1]表示第二行就输出"BBBB"了。
输出为BBBBCC
原因:
1. C语言中,数组各个元素在内存中按行存储,如:s[1]的四个字符后紧接着存储s[2]的字符
2. 数组行宽为4,按理说每一行应该为该行的字符串结束符“\0”留一个位置(会自动填充),但s[1]这一行中4位均为字母“B”,用printf()做字符串的输出是以结束符“\0”标识串的输出结束的,于是输出函数在“BBBB”后继续输出,直至在“CC”后出现了“\0”,此时,输出完毕
不知道阁下看的是什么书?这么前卫。我2006年学C语言,后面还一直在编些程序,但就是没遇到过char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种定义时初始化也是合法的。
无论从课本上(我学的是科学技术出版社的)学习、还是编译器上(用过TC、VC6.0)调试,我都觉得char s[4][4]={"AAAA","BBBB","CC","DD"}; 是错误的,事实上编译器确实是会报错,这种定义时赋值越界!改为char s[4][5]={"AAAA","BBBB","CC","DD"};这样才是对的。
看了楼上的回答,说是ANSI C有了新的规定,为了学点新知识我特意去查了下:ANSI C就是美国国家标准协会制定的一个C语言的标准,于1983年发表。ANSI C是C语言的标准,任何C语言的编译器都在ANSI C的基础上扩充。照这么说,VC应该支持char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种写法,但是事实上VC不支持!所以还是觉得改为char s[4][5]={"AAAA","BBBB","CC","DD"};才是对的。
char s[4][4]={"AAAA","BBBB","CC","DD"}; 这种写法在VC编译器上真的通不过。char s[4][5]={"AAAA","BBBB","CC","DD"};能通过,printf("\"%s\"\n",s[1]); 输出的是"BBBB" 。因为s[0]、 s[1]、s[2]、s[3]指向的是一行(相当于行指针一样),输出的是一个字符串。 \" 是转义字符,表示的是双引号的一半。所以输出时\" \"对应的是一对双引号。
说到这里,我真有点好奇了,不知阁下看的书是什么书,不会是研究C语言发展,在探讨和改进的吧?
#include <stdio.h>
void main()
{
char s[4][5] = {"AAAA","BBBB","CC","DD"};
printf("%s\n", s[1]);
}
BBBBCC
因为输出为遇到'/0'中止
字符串为空,默认赋值'/0'
C的字符串有哪些问题
讨论C语言字符串的问题,首先,C语言没有真正的字符串类型,字符串是以空字符结尾的字符数组,且只能使用字符数组表示。在C语言中,存在字符串字面量,通过双引号括起来表示,编译器会将其转换为NUL结尾的字符串。对于不能直接表示的字符,可以使用转义序列,如换行符\\n、回车符\\r等。字符串的长度没有...
C语言简单的字符串、字符处理问题求助
第一题:简单点的做法是申请个足够大的char数组。比如假定最多1000种字串,每串最大长度为20,就申请word[1000][20],以及一个num[1000],一个字串个数wordNum,初始化置为0。然后每读到一个字串就d到word中检测有没有重复的,有的话就给对应序号的num[i]加一,没有的话就添加,然后num[i]...
c语言 字符串操作问题
程序有问题,输出不确定。void fun( char *s){ char a[10];strcpy( a, "STRING");s=a; \/\/s指向数组a,而数组a离开这个函数就释放了。} \/\/正确的程序如下:include<stdio.h> include<string.h> char a[10]; \/\/数组a定义为全局的。void fun( char *&s) \/\/参数定义为引用。...
c语言,字符串问题和while循环
1、while (*string)2、while (*string != 0)3、while (*string != '\\0')while语句后面的条件语句应当是个表达式,在C语言中这个表达式可以是逻辑表达式也可以是数值表达式,当表达式的值为数值时,0表示false,非0表示true 第一种写法的意思就是当string的当前内容是非0时实行循环,等效于第2种 ...
c语言字符与字符串问题
不是同一类型,字符'a'只占了一个字节,字符串的后面是有个结束符'\\0',因此"a"实际的储存空间站两个字节,为{a,\\0}
c语言字符串字符个数问题? 字符串"A\\xB\\xC"中包含的字符个数?答案说是...
字符串"A\\xB\\xC"中包含的字符个数是两个,因为\\xB和\\xC是转义字符,表示十六进制的ASCII码值。转义字符以\\或者\\x开头,后面跟着数字或字母。例如,\\n表示换行符,\\x41表示A。所以,这个字符串实际上是"A"加上两个不可显示的ASCII字符。
c语言字符串提取与合成问题?
一、两个指针分别指向数组第一项和第二项,对应偶数项和奇数项,之后指针同时循环+2取值保存在对应数组。二、拼接字符串直接使用字符串函数strcat。(不想使用库函数,也可循环赋值)。include <stdio.h> include <string.h> define M 20 \/\/数组最大长度 int splitStr(char str[],char oStr[],...
c语言 字符串长度与数组长度,高手进
你好 应该这样理解 首先,就c语言来讲,字符串的实现一般使用数组,例如 char s[]= "hello";hello里面有五个字符 分别是 h e l l o 由于c语言规定在存放字符串的数组里要以字符串结束符来结束 也就是‘\\0’所以上面定义中的数组s长度为字符总个数5 加上一个结束符‘\\0’也就是6 那么 字...
C语言 字符串长度问题!
第一个字符串长度为9(\\x44 表示D,\\\\表示\\,\\n表示回车,\\102表示B)0:a 1:D 2:\\ 3:4:b 5:c 6:d 7:B 8:a --- 第二个字符串长度为7(\\t 表示制表符,\\xab表示一个字符,\\3表示一个字符,\\\\表示\\)0:x 1:y 2:z 3:4:5:6:\\ ...
c语言问题 高手帮忙 字符数组 问题空字符'\\0' 是空格吗
空格字符 ' ' 用 %c 形式输出,是一个空格。空格字符 ' ' 用 %d 形式输出,是一个数值32。'\\0' 是字符串结束标记,strlen(c) 长度计算,只计算到 '\\0' 以前那个字符。'\\0' 是字符串结束标记,%s输出 只输出到 '\\0' 以前那个字符。=== '\\0', ' ' 的不同,我们用下面输出方法可以...
博养人免: 你的程序考虑的不周全,假如字符串首位的空格都不止一个,那你这种方法就不够完善另外对于字符串来说,一般利用'\0'判断字符串长度而不是直接给出长度 你...
带岭区13791097928: 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; }
带岭区13791097928: C语言输入字符串问题 - ?
博养人免: while(scanf("%c",&a[i])==1)这里是以%c字符格式进行接受的,所以你输入11 12 13回车后,一个%c带走一个字符.而且目标数组a也是字符数组char a[100](这个100是最大容量,放的数据小雨100就可以,count起到计数的作用,或者说能...
带岭区13791097928: C语言简单的字符串、字符处理问题求助 - ?
博养人免: 第一题:简单点的做法是申请个足够大的char数组.比如假定最多1000种字串,每串最大长度为20,就申请word[1000][20],以及一个num[1000],一个字串个数wordNum,初始化置为0.然后每读到一个字串就d到word中检测有没有重复的,有...
带岭区13791097928: c语言 字符串排序问题 请教高手帮忙解答 - ?
博养人免: #includevoid sort(char *strings[], int n) {int i, j ;char *temp;for( i = 0 ; ifor( j = i + 1 ; jif( strcmp(strings[i], strings[j]) > 0 ){temp = strings[i] ;strings[i] = strings[j] ;strings[j] = temp;} } void printStr(char *strings[], int n) { int i = 0; while(iprintf("%d:...
带岭区13791097928: c语言字符串程序问题?
博养人免: #include <stdio.h> void main() { char *p1,*p2,s1[100],s2[100]; printf("输入字符串1:"); scanf("%s",s1); printf("输入字符串2:"); scanf("%s",s2); for(p1=s1;*p1;p1++); for(p2=s2;*p2;*p1++=*p2++); *p1='\0'; printf("连接后的字符串:%s",s1); }
带岭区13791097928: c语言如何匹配字符串的问题 - ?
博养人免: 可以使用strcmp函数匹配两个字符串,也可以用strstr函数在前一个字符串中查找后字符串包含的字符串
带岭区13791097928: 数据结构(C语言)中字符串的问题 - ?
博养人免: 空串 :里面是空 为NULL 空格串:里面是一个" " ASCLL=32 定义空串 : string a="";“空串”是无法输入,但可以使一串为空串 a="";
带岭区13791097928: c语言关于字符串输入的问题 - ?
博养人免: 有明显的致命错误:C语言字符串输入时,不要加地址符号&,因为数组名就表示地址.for (int i=0;i<2;i++) { scanf("%s",stu[i].name); scanf("%d",&stu[i].num); scanf("%c",&stu[i].male); scanf("%s",stu[i].address); scanf("%d",&stu[i].score); } 另外再加个头文件#include<string.h> C语言中比较两个字符串是否相等,不能直接比较if (stu[j].name==nm) 应改成if(strcmp(stu[j].name,nm)==0)
带岭区13791097928: 关于c语言字符串输入的问题 - ?
博养人免: 不行啊...你还没搞明白在c里面字符串的意义 char * a只是定义了一个字符类型的指针,它本身只是一个指针变量,必须指向实际的内存空间才有意义(作为变量,它本身也占有一定空间,可用sizeof(char *)看一下,在c里面也可以操作,但是...