c语言字符串

0: 字符串,羊肉串


1:字符串字面量,字符串字面量是指使用双引号扩起来的字符序列,例如:“hello world”

在c语言中,把字符串当作字符数组来处理,当遇到长度为n的字符串时候,程序分配长度为n+1的数组来保存,最后一个字符表示字符串的结束‘\0’

根据我们知道的数组和指针的关系,可以使用字符指针来保存字符串常量,例如char *c;c=“hello world”;可以使用字符指针来保存字符串常量,可以使用字符指针来保存字符串常量

可以使用字符指针来保存字符串常量,可以使用字符指针来保存字符串常量

注意区分字符敞亮和字符串常量,例如:‘a’和”A”,第一个是字符常量,而第二个是字符串常量,这个羊肉串只有一个羊肉而已


2: 首先测试一下*取地址,是否可以取*&i这个

c语言里面使用一维数组来保存字符串,字符串的最后一个字符是空字符‘\0’,加入我们要保存10个字符,需要定义个一个长度为11的字符数组来保存字符串

初始化字符串

char name[10] =“tom”; 在数组里面保存是这样的

char name[10]={’t’,’o’,’m’,’\0’}


3: 字符数组和字符指针:(一句话,一旦要修改就用数组)

看下面两个申明:

char *str =“Hello World”;

char str1[] =“Hello World”;

字符数组和字符指针的区别:

1,字符数组和任何其他的数组一样,数组元素可以被修改,而字符指针保存的是字符串字面量,是一个常量,不能够被修改

2,申明为字符数组时,str1位数组名,而神明为字符指针时str位指针变量,可以被修改重新赋予值

3,如果需要可以修改变量的字符串,必须申明为字符数组,字符指针是不行的

//
//  main.c
//  TestArrayPoint
//
//  Created by 千 on 16/7/18.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    int array[] = {1,2,3,4,5};
    //测试指针是否可以修改该数组上面的值,是可以的
    int *point = array;
    *point = 6;
    printf("*point=%d\n",*point);
    printf("array[0]=%d\n",array[0]);
    
    //测试指针是否可以修改字符数组上面的值,是可以的
    char charArray[]="hello";
    printf("charArray[0]=%c\n",charArray[0]);
    char *pointchar = charArray;
    printf("*point=%c\n",*pointchar);
    *pointchar = 'w';//注意了这里是*,不能少了,而且后面的w是字符而不是字符串
    //charArray[0]='w';
    printf("*point=%c\n",*pointchar);
    printf("*charArray=%s\n",charArray);
    
    //指针数组可以访问每一个元素,但是不可以修改,所以说如果要修改就使用字符数组
    
    char *pointArray = "hello";//指针数组,可以访问里面的每个元素的,但是不可以修改的
    printf("*charArray=%s\n",pointArray);
    pointArray++;
    //*pointArray='c';//是不可以修改的如果修改,会报错,Thread 1:EXC_BAD_ACCESS(code=2,address=0x1000000...)
    printf("%c\n",*pointArray);
    printf("*charArray=%s\n",pointArray);
    return 0;
}



4: 字符串的读写:

可以使用printf和puts来输出一个字符串,printf提供了格式化输出,可以使用%s来输出一个字符串,还可以使用%.ps来输出字符串的一部分,p表示字符串的个数,puts值提供一个字符串参数,可以自动换行


字符串库函数string.h


输入输出的格式控制,比如%d表示后面的输出类型为有符号的10进制整形,%u表示无符号10进制整型,%lu表示输出无符号长整型整数


//
//  main.c
//  StringDemo
//
//  Created by 千 on 16/7/17.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#include <stdio.h>
#include <string.h>

#define SIZE 5

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    int c = 100;
    int *p =&c;
    printf("地址p=%p\n",p);
    printf("c的值=%d\n",c);//注意了%d的%符号一定不能是
    //*表示取地址上面的值
    printf("c的值=%d\n",*&c);
    
    
    char string[5] ="12345";
    printf("c size is %d\n",sizeof(string));
    for (int i=0;i<sizeof(string); i++) {
        printf("%c00000\n",string[i]);
    }
    //字符串常量
    char *name = "tom";//字符串数组来保存{‘t’,‘o’,‘m’,‘/0’} 空字符结尾
    char test[100]="tom";//
    char email[]="tom@gmail.com";
    
    char charArray[SIZE+1]="tom12";//它的长度实际是6个
    //字符串变量
    char test2[5]="hello";//初始化
    //test="Hello World";//初始化可以,但是不可以赋予值
    
    //字符指针和字符数组
     char array[] = "Hello World";
    char *testArray = "Hello World";
    printf("%s\n",array);
    printf("%s\n",testArray);
    
    //4 字符串的输出
    char *strOutput = "hELLO WORLD";
    printf("str=%s\n",strOutput);
    printf("str=%.5s\n",strOutput);
    
    //5 字符串的输入
    char testInput[10];
    printf("Please intput a String:\n");
    //scanf("%s",testInput);//但是如果遇到hello world 这样的中间有空格的就有问题了
    //printf("%s\n",testInput);
    gets(testInput);//使用gets就不会有上面的问题了
    printf("%s\n",testInput);
    
    //字符串的库函数:
    //字符串的长度
    //size_t strlen(const char *s);
    //该函数返回第一个空字符\0 前面的字符个数
    //char *testStrLen="123456";
    char testStrLen[20]="123456";//当神明的时候的长度比初始化时候的长,返回第一个空字符\0 前面的字符个数
    size_t size = strlen(testStrLen);
    printf("testStrLen is %lu\n",size);
    
    //字符串的拷贝
    //char *str = "Hello";str = “hello world”;这个事不行的
    
    return 0;
}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值