目录:

一、字符串

二、字符串输入输出函数

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

回到顶部

一、字符串

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. POJ 3831 &amp; HDU 3264 Open-air shopping malls(几何)

    题目链接: POJ:id=3831" target="_blank">http://poj.org/problem?id=3831 HDU:http://acm.h ...

  2. Effective JavaScript Item 36 实例状态仅仅保存在实例对象上

    本系列作为EffectiveJavaScript的读书笔记. 一个类型的prototype和该类型的实例之间是"一对多"的关系.那么,须要确保实例相关的数据不会被错误地保存在pro ...

  3. 计算机网络--http代理server的设计与实现

    一.Socket编程的client和服务端的主要步骤: Java Socket编程:对于http传输协议 client: 1.创建新的socket,绑定serverhost和port号 2.Socke ...

  4. Unity3D-第一视角射击游戏

    一.新建关卡 File,Save Scene,File,New Scene,File,Save Scene as... ,Level02.unity 1.建立场景 从Assets中拖放场景模型到Hie ...

  5. css重置

    清除标签的默认样式 body{margin:0;}ul,ol{margin:0 auto;padding:0;}li{ list-style:none;}dl{margin:0;}dd{margin: ...

  6. 如何查詢 SQL Server 資料庫中欄位值為 NULL 的資料(转)

    最近使用mssql的时候对于未null的字段查询不到 http://blogs.msdn.com/b/jchiou/archive/2008/05/01/sql-server-null.aspx 先建 ...

  7. EL表达式中引用隐式变量

    除了在jsp中9大隐式变量(在前面文章也叫预定义变量)在转化成为servlet后_jspService中可以看到: public void _jspService(final javax.servle ...

  8. C# 控件包

    http://www.cnblogs.com/Keep-Silence-/archive/2013/01/22/2871694.html

  9. 自增或自减例子:i++和++i的相同点和不同点

    /* Name:++i和i++的区别 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月15日 02:40:27 Description:熟悉前自增或自减的 ...

  10. java核心技术学习笔记之一程序设计概述

    Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向 ...