12-C语言字符串
目录:
一、字符串
1 一组字符数组,以数组的首地址开始,以ASC码的'\0'结束。
2 字符串与普通数组的区别:普通数组没有结束标识,而字符串是有的。
3 字符串的定义方式:
字面值:"hello"
使用字符数组定义字符串:char str[10] = {''a,'b','\0'};
使用字符指针:char* str = "hello";
4 字符串创建方式的不同
声明的变量数组是放在内存中的栈区。
字面值创建的字符在内存代码区。如果创建的字符串,且值是相同的,只会创建一个内存区域,值是只读的。
使用数组方式创建的字符串,放在内存中栈区,其值可以改变。
字符指针,只是指向了内存的一个区域。
#include <stdio.h> int main(int argc, const char * argv[])
{ // 字面值
printf("Hello, World!\n");
// 字符数组
char str[] = {'h','e','l','l','o','\0'};
str[] = 'a';
char str5[] = {'h','e','l','l','o','\0'};
// 字符指针
char* str2 = "hello";//字面值字符串不可以改变其值
char* str3 = str;
char* str4 = "hello";
// 输出
printf("str:%s\n",str);
printf("str2:%s\n",str2);
printf("str3:%s\n",str3);
printf("str:%p\n",str);
printf("str2:%p\n",str2);
printf("str3:%p\n",str3);
printf("str4:%p\n",str4);
printf("str5:%p\n",str5);
return ;
}
练习:键盘输入个人信息,姓名:年龄:性别:薪资:
#include <stdio.h>
//练习:键盘输入个人信息,姓名:年龄:性别:薪资:
int main()
{
printf("输入个人信息:\n");
char name[];
char sex;
int age;
double salary;
printf("姓名:");
scanf("%s",name);
printf("性别:");
scanf("%*c");
scanf("%c",&sex);
printf("年龄:");
scanf("%d",&age);
printf("薪资:");
scanf("%lf",&salary);
printf("姓名%s\n",name);
printf("性别%c\n",sex);
printf("年龄%d\n",age);
printf("薪资%lf\n",salary);
return ;
}
xcode快捷键:command +a 、 Ctrl+i全选格式化
二、字符串输入输出函数
1输入
scanf()接收用户从键盘上输入的数据。
scanf(%*c)清空缓存区
练习:输入三次性别,并输出。
在输入字符串的时候不存在缓冲区问题,但存在安全性问题,(内存溢出)。
解决:fgets()函数
语法格式:fgets(参数1,参数2,参数3)
参数1保存数据的首位置
参数2保存的是长度(包括结束符)
参数3获取数据的方式
注:使用fgets方式输入数据的时候,会自动在数据的后面加上'\n';计算数据的时候,原有数据内容加上'\0','\n';解决安全性问题,主要是参数2;
假如字符串长度是3:
abcde\n\0 -> abc\0de\n
2 输出
printf()可以输出字符串,并且可以根据占位符的个数来决定输出字符串的个数。
puts()可以输出一个字符串,而且是自动换行。
printf()与puts()区别:
相同点:都可以输出字符串
不同点:printf()需要手动换行,可以多次输出字符串,puts()自动换行,只能输出一个字符串。
3 const关键字,可以将变量变为只读,只可以在初始化的时候才可以改变变量的值,此变量就为常量,
const int* p = &i;//指针指向的值变为只读
int* const p = &i;//指针的值变为只读
/*输入函数 缓冲区问题*/
#include <stdio.h> int main(int argc, const char * argv[])
{
/*
char ch1,ch2,ch3;
printf("请输入第一个字符:\n");
scanf("%c",&ch1);
scanf("%*c");//清除缓冲存
printf("请输入第二个字符:\n");
scanf("%c",&ch2);
scanf("%*c");
printf("请输入第三个字符:\n");
scanf("%c",&ch3); printf("输出第一个字符:%c\n",ch1);
printf("输出第二个字符:%c\n",ch2);
printf("输出第三个字符:%c\n",ch3);
*/ char ch1[],ch2[];
printf("请输入第一个字符串:\n");
fgets(ch1, , stdin);
//printf("输出第一个字符串:%s %s\n",ch1,ch1);
puts(ch1);
printf("test\n");
/*
printf("请输入第二个字符串:\n");
fgets(ch2, 6, stdin);
printf("输出第二个字符串:%s\n",ch2);
*/
return ;
}
三、指针数组(字符串数组)
1 数组中的元素是指针,而指针又是字符串,所有也叫字符串数组。
2 保存多个字符串内容
3 定义指针数组:char* array[3]={"gy","zf","lb"};
4 遍历
for(int i = 0;i < 3;i++){
printf("array[%d]:%s\n",i,array[i]);
}
//指针数组 字符串数组
#include <stdio.h>
void test(){
// 声明指针数组
char* names[] = {"guanyu","zhangfei","liubei"};
//遍历
for (int i = ; i < ; i++) {
printf("names:%s\n",names[i]);
}
}
//输入3个人姓名,输出
void test2(){
char* names[];
char name[][];
for (int i = ; i < ; i++) {
printf("输入姓名:\n");
scanf("%s",name[i]);
names[i] = name[i];
}
for (int i = ; i < ; i++) {
printf("names:%s\n",names[i]);
}
}
int main(int argc, const char * argv[])
{ test2();
return ;
}
12-C语言字符串的更多相关文章
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出
C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出 strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能: ...
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- C语言 字符串操作 笔记
/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...
- 零基础学习C语言字符串操作总结大全
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...
- C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...
- C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- c语言字符串操作大全
C语言字符串操作函数 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #incl ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
随机推荐
- a simple erlang process pool analysis
a simple erlang process pool analysis 这是一个简单的erlang进程池分析,是learn you some erlang for Great Good 里面的一个 ...
- C#实现按Word模板导出Word(加书签bookMark)
本方法是针对word导出操作,需要制作好的模板文件 模板.doc 引入应用Microsoft.Office.Interop.Word 11.0 (office2003) 导出文件注意:有时候迅雷会在 ...
- 现在网页中流行的css3样式
1.鼠标放在圆形图片中,图片渐渐的变方形[17素材头像的特效,觉得不错就研究下来了 ———— 17sucai.com] img{border-radius:50%;transition: all .4 ...
- eclipse使用技巧---使用正则表达式查找替换
1,Eclipse ctrl+f 打开查找框2,选中 Regular expressions (正则表达式) 去掉/* */(eclipse) /\*(.|[\r\n])*?\*/去掉/ ...
- 更新cydia“sub-process/usr/libexec/cydia/cydo returned anerror code(2)”是怎么回事?
最近更新cydia的时候出现了sub-process/usr/libexec/cydia/cydo returned anerror code(2)的红字是怎么回事? 解决方法:删掉有关升级的东西,把 ...
- cocostudio导出plist文件
今天在用Armature类时用到cocostudio导出文件,由于美术的原因他使用的是中文命名法(这你敢相信),后面在导入程序中跟了下代码发现是解析plist文件有误,我就来比较正常功能文件和有错文件 ...
- Django web开发【5】 实现标签功能
标签tag在很多web2.0应用中都很常见,标签其实就是关联某些信息的一个关键字.打标签实际上就是给内容分配标签的过程,它通常由作者或者用户实现.标签之所有这么流行是因为它允许用户对自己创建的博客.图 ...
- 尼康D5100使用设置及技巧,同样也适用尼康D5200
尼康D5100使用设置及技巧,同样也适用尼康D5200,希望对新手能有点帮助. 一.设置 1.优化校准:可以在menu菜单中找到它,一般使用"标准"就可以,建议将"标准& ...
- codeforces 546D Soldier and Number Game
题目链接 这个题, 告诉你a, b的值, 那么只需要求出b到a之间的数, 每个数有多少个因子就可以. 具体看代码, 代码里面有解释 #include<bits/stdc++.h> usin ...
- MySQL 复制
第一步:为配置主数据库与备数据库 主:server_id = 1 log_bin = E:\mysql_log_bin #复制事实上是二进制文件在备库上的重做,所以要支持二进制文件. 备: ...