08-C语言学习-字符串数组,二维整形数组

发布时间:2026/7/29 6:40:31
08-C语言学习-字符串数组,二维整形数组 两个if两个if互不干扰并行判断if与else if只会触发其中一个一维字符型数组C语言没有字符串型数据操作和存储字符串要使用字符型数组来进行。定义数据类型 数组名[元素个数] { }; char str[] hello world\0,需要12个有一个空格和\0元素个数必须为常量元素数量必须足够确保能够存下字符串末尾的\0字符。数组元素的访问char str[20]; char str[12];str[0]; str[0] h;str[1]; str[1] e;... ...str[19]; str[11] \0;\0不需要输入默认会存数组的存储初始化char str[] hello world; 默认初始化根据定义的字符个数1分配空间不建议使用// 数组长度自动为12h e l l o w o r l d \0char str[12] hello world;char str[12] {h,e,l,l,o, ,w,o,r,l,d,\0};char str[12] {hello world};char str[6] {0};字符串清0可以存其他的了不带以及!先定义、后续逐个下标赋值剩余空间是垃圾不会自动产生 \0定义时大括号初始化没写的元素自动置 0(不是字符是二进制0恰巧的是\0的二进制也是0)只要要当作字符串使用% s、strlen、strcpy必须确保存在 \0不能赌内存巧合。字符串的打印printf(%s);持续逐个字节输出直到读到 \0 才停止。缺少 \0 → 内存越界字符数组无 \0 → % s 高危传入指针指向的内容中途出现 \0输出被截断puts()会在字符串末尾多打印一个\n字符注意以上只能打印字符串不能打印整形数组整形数组依然要用for循环赋值同整形数组赋值一个一个来接收char str[32] {0};scanf(%s, str); //字符串接收不需要加取地址符,scanf接收字符串自带循环//接收不到空格scanf认为空格是结束的标志gets(str); //以回车为结束。gets() 读到换行 \n 时直接丢弃换行不会存入缓冲区末尾自动补上 \0。fgets(字符串名, 数组大小, stdin); *会保存回车*fgets(str, sizeof(str), stdin); //stdinstandard input标准输入流输入设备默认键盘stdin 标准输入 → 键盘程序读数据stdout 标准输出 → 屏幕程序打印数据printf 默认 stdoutstderr 标准错误 → 屏幕打印报错信息strlen(); //统计字符串中字符的数量 (使用需要引入新的头文件string.h)返回无符号longsizeof(); //统计字符串所占空间的大小与定义有关返回无符号int\0常作为终止符号SACII为0二进制的0不同与字符00的ASCII码为48本身可以使用for循环对字符串进行遍历读取出但无法在终端中显示出(不是空格或换行是完全不显示)char str[] abc\0123;printf(%s, str); // 只输出 abcprintf(长度%zu, strlen(str)); // strlen只算到第一个\0结果3%s、strlen、strcpy 等字符串工具遇见第一个 \0 直接终止后面内容失效char s1[] abc\0123; // 中间1字节ASCII 0截断%schar s2[] abc\\0123; // \ 和 0 两个普通字符不会截断\\用于输入反斜杠符号键盘输入无法输入\0会被识别为\与0对应\\与0字符串中插入\0只能单个赋值。strcpy(); //字符串拷贝函数strcpy(目标字符串源字符串名);//目标字符串定义的大小一定要源因为strcpy会不断将源所有字符赋值到目标如果源字符串长度 ≥ 目标数组容量会越界写入破坏内存。strcpy(dest, src);// 一直复制到 \0不限制长度容易溢出strncpy(dest, src, size);// 最多复制size个字节// 注意如果size耗尽还没读到\0dest末尾**不会自动追加\0**strcat(); //字符串拼接strcat(目标要拼接的内容)内容可以为字符串变量名或字符串strcat(str, str2);strcat(str, worlsd);注意目的空间一定要存放的下拼接后的字符串。字符串的比较 strcmp();strcmp(str1,str2); //比较两个数组中的字符串是否一样\0之前的值而不是字符串的大小结果3种值(有符号int)0 两个字符串相同大于0的值表示第一个字符串大于第二个字符串小于0的值表示第一个字符存小于第二个字符串从左到右比较两个字符串的字符直到ASCII码不同第一个字符码减去第二个字符码并返回二维整形数组数组定义由一维数组构成的一维数组一维数组的一维数组数据类型 数组名[行数][列数]行数列数必须为常量初始化全部初始化int a[2][3] {1,2,3,4,5,6};int a[2][3] {{1,2,3},{4,5,6}};局部初始化int a[2][3] {1,2,3,4}; 局部初始化没有给的值为0int a[2][3] {{1,2},{4}}; 同上int a[2][3] {0};或{{0}}默认初始化, 可以不写行但必须写列int a[][3] {1,2,3,4,5,6}; 2行3列int a[][3] {1,2,3,4}; 2行3列int a[][3] {{1,2},{4}}; 2行3列定位赋值数组名[行标][列标] n使用内嵌双for循环对二维数组进行遍历for 行{for 列{语句块可以接收数据scanf(),需要取地址符}}单一性连续性有序性从左到右从上到下先行后列