目录:

一、字符串

二、字符串输入输出函数

三、指针数组(字符串数组)

回到顶部

一、字符串

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语言字符串的更多相关文章

  1. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  2. C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出

    C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出 strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能: ...

  3. C.【转】C语言字符串与数字相互转换

    1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...

  4. C语言 字符串操作 笔记

    /* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...

  5. 零基础学习C语言字符串操作总结大全

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  6. C语言字符串拷贝

    C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...

  7. C语言字符串长度(转)

    C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...

  8. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  9. c语言字符串操作大全

     C语言字符串操作函数 函数名: strcpy 功  能: 拷贝一个字符串到另一个 用  法: char *stpcpy(char *destin, char *source); 程序例: #incl ...

  10. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

随机推荐

  1. Holding Bin-Laden Captive!(母函数)

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  2. netbeans字体与颜色配置模板相关网站

    NetBeans Themes -Color Schemes of the NetBeans IDE NetBeans ThemeBuilder

  3. 用正则匹配一串字符串中的ip地址

    IP地址有4段组成,每一段数字的范围为0-255,在一段文本中提取ip地址可以这样 $src = 'src = alsdlk ks sdf2.3.3.4 234.193.1.120.1232 d.23 ...

  4. SQL SERVER 2000/2005/2008数据库数据迁移到Oracle 10G细述

    最近参与的一个系统涉及到把SQL Server 2k的数据迁移到Oracle 10G这一非功能需求.特将涉及到相关步骤列举如下供大家参考: 环境及现有资源: 1.OS: Windows 7 Enter ...

  5. OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

    本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...

  6. 网页平面设计 CSS

    1.在html中引入css的方法 1.行内式 行内式即在标记的style属性中设定CSS样式,这种方式本质上没有体现出CSS的优势,因此不推荐使用. 例如:<h1 style="属性名 ...

  7. JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象

    一.仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题,如下: 1.它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值,这还不是最大的问题 ...

  8. 关于消息推送和service的一些调查-清理内存通知栏点击无响应

    起因:做了两个带推送的app:HiApp和WeApp,前者个推,后者百度推送,但前者有一个小缺陷. 现象:两部手机 1.htcD820t手机,运行中的app利用自带的关闭最近程序后,通知栏不清理该ap ...

  9. Eclipse\MyEclipse 安装tomcat插件后,还需要配置Tomcat Home

    Eclipse 安装tomcat插件后,配置Tomcat Home的步骤如下: MyEclipse 安装tomcat插件后,配置Tomcat Home的步骤如下:

  10. 全局通知Notification

    Notification 全局通知 关于全局通知的个人理解: 即有一个发射消息的,在整个应用中任何对象都可以接受这个消息 但是无论是哪个对象接受消息,都要在这个对象结束时移除消息 简单的说 就是给对象 ...