目录:

一、字符串

二、字符串输入输出函数

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

回到顶部

一、字符串

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. Cocos2D-x权威指南:核心类成员CCNode

    节点类(CCNode)是Cocos2D-x中的主要类,继承自CCObject.继承关系如图3-2所看到的. 不论什么须要画在屏幕上的对象都是节点类. 最经常使用的节点类包含场景类(CCScene).布 ...

  2. .Net 利用消息在进程间通讯实现进程互操作

    有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据:还有可以使用网络端口实现进程间通讯.共享一片内存区域记录及 ...

  3. js快排与namespace

    function quickSort(arr){ if(arr.length<=1){ return arr; } var num = Math.floor(arr.length/2); var ...

  4. Java调用ICTCLAS2015

    最近老板让做分词,指定使用ICTCLAS,于是到官网下载了2015,鼓捣了一晚上也没弄出来,百度了一上午还是一头雾水,,幸运的是现在已经弄好了,趁着没忘赶紧写下来. 1.首先解压并找到:2015080 ...

  5. SQL 2008升级SQL 2008 R2完全教程或者10.00.4000升级10.50.1600

    今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.S ...

  6. Tomcat使用startup启动,一闪而过,如何查看出错信息

    解决办法:打开startup.bat,通过使用run命令在原有启动窗口显示出错信息. 在startup.bat中找到:call "%EXECUTABLE%" start %CMD_ ...

  7. 有关std::map和std::vector的使用

    先说map吧. 最需要注意的就是:用下标访问map中的元素时,与使用下标访问vector的行为截然不同! 用下标访问不存在的元素时,将导致在map容器中添加一个新的元素,它的键即为该下标! 然而很多时 ...

  8. 数组求最大最小值和排序java实现

    public class ArrayDemo05 { public static void main(String[] args) {     int list01[]={67,89,87,69,90 ...

  9. javascript块级作用域

    在c/java中,拥有块级作用域的概念,大括号内就是一个块级作用域,在块级作用域内声明的变量,块以外不可见. C语音的块级作用域示例如下: ,two = ; if(one < two){ ; t ...

  10. 【转】jsp 表单form传值

    写的很好,看到了忍不住不转啊,希望可以分享一下~~ 转载自http://blog.csdn.net/anmei2010/article/details/4140216 页面间链接和数据传递的三种方式 ...