目录:

一、字符串

二、字符串输入输出函数

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

回到顶部

一、字符串

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. JS isArray记录

    var isArray=Function.isArray||function(0){ return typeof o === "object" && Object. ...

  2. 【Deep Learning】genCNN: A Convolutional Architecture for Word Sequence Prediction

    作者:Mingxuan Wang.李航,刘群 单位:华为.中科院 时间:2015 发表于:acl 2015 文章下载:http://pan.baidu.com/s/1bnBBVuJ 主要内容: 用de ...

  3. ItextSharp代码示例

    示例代码目录 示例代码0101. 5 示例代码0102. 7 示例代码0103. 9 示例代码0104. 11 示例代码0105. 13 示例代码0106. 15 示例代码0107. 17 示例代码0 ...

  4. 【转】Java保留固定小数位的4种方法

    package com.test; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.Numb ...

  5. left outer join

      table   A:  Field_K,   Field_A    1                       a    3                       b    4      ...

  6. 从UIImage的矩阵变换看矩阵运算的原理

    1.矩阵的基本知识: struct CGAffineTransform {  CGFloat a, b, c, d;  CGFloat tx, ty;}; CGAffineTransform CGAf ...

  7. SGU题目总结

    SGU还是个不错的题库...但是貌似水题也挺多的..有些题想出解法但是不想写代码, 就写在这里吧...不排除是我想简单想错了, 假如哪位神犇哪天发现请告诉我.. 101.Domino(2015.12. ...

  8. 第一个Hadoop程序——Hello Hadoop

    本人原创,转载请注明出处:http://blog.csdn.net/panjunbiao/article/details/12773163 下载Hadoop程序包,下载地址:http://hadoop ...

  9. ThinkPHP实现导出

    刚开始做项目的时候,遇到了这个需求.说实话,对于一个才出来实习的菜鸟,而且还是才接触PHP的菜鸟而言,实在是有心杀敌,无力回天啊. 最简单的方法,就是网上找一个插件,然后一个本来就十几兆的项目,又增加 ...

  10. Auto login to your computer

    in run dialog, type in following words and enter Rundll32 netplwiz.dll,UsersRunDll On user account d ...