【新手入门必看】字符串

一、初识字符串

1、定义的几种格式

和整型数组一样:int data[]={1,2,3,4,5};        char str[]={'h','e','l','l','o'};

之前我们学过数组名就等于地址,那么也可以通过指针的方式来定义char *pchar="hello";

#include <stdio.h>

int main(int argc,char *argv[]){
    char a[]={'h','e','l','l','o'};
    char b[]="hello";
    char *pchar="hello";

    for(int i=0;i<3;i++){
        for(int j=0;j<5;j++){
            if(i==0){
                printf("%c ",a[j]);
            }else if(i==1){
                printf("%c ",b[j]);
            }else{
                printf("%c ",*(pchar+j));
            }
        }
    }
    return 0;
}

(1)定义的区别

int str[]="hello"; 和 int *pchar="hello";

str是字符串变量,定义后允许被修改;pchar是字符串常量,定义之后不允许被修改。

2、关于打印

(1)puts

#include <stdio.h>
int puts(const char *str);//puts 函数用于输出一个字符串到标准输出设备,并且在输出结束后自动换行。

(2)printf("%s"

printf("%s\n",b);//%s 格式说明符用于输出一个以空字符 \0 结尾的字符串。

a 是一个字符数组,而 b 是一个字符串字面量。两者的区别在于 b 自动包含一个空字符 \0 作为终止符 

但是使用   printf("%s ",a);   这个打印a[]时会出现错误:将 a 数组作为字符串来打印。a 是一个字符数组,其中包含了 'h', 'e', 'l', 'l', 'o' 这些字符。然而,%s 格式说明符期望的是一个以空字符 \0 结尾的字符串。由于 a 数组没有显式地以空字符结尾,当 printf 遇到 %s 格式说明符时,它会一直读取字符直到遇到第一个空字符或者直到超出数组范围为止。在这种情况下,由于 a 数组没有以 \0 结尾,printf 可能会继续读取内存中 a 数组之后的数据,导致不确定的行为。为了确保 a 能够正确地作为字符串打印,需要在数组末尾添加一个空字符 \0。

同样尝试将 b 数组作为字符串来打印。b 是一个字符串字面量,它的类型是 char[6](包括空字符 \0。字符串字面量自动以空字符结束,因此 b 的内容实际上是 'h', 'e', 'l', 'l', 'o', '\0'

(3)putchar

putchar 函数只能输出单个字符。

int putchar(int character);//character 是一个整数,表示要输出的字符的 ASCII 值。
#include <stdio.h>

int main() {
    char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};  // 字符数组,包含终止符
    char b[] = "hello";                          // 字符串字面量

    for (int i = 0; a[i] != '\0'; ++i) {
        putchar(a[i]);  // 逐个输出 a 的字符
    }
    putchar('\n');  // 输出换行符

    for (int i = 0; b[i] != '\0'; ++i) {
        putchar(b[i]);  // 逐个输出 b 的字符
    }
    putchar('\n');  // 输出换行符

    return 0;
}

3、字符数组和字符串的长度

字符串带有结束标志 '\0' 所以b 的内容实际上是 'h', 'e', 'l', 'l', 'o', '\0'。C语言<string.h>里面的函数操作字符串都会检测结束标志 '\0'

#include <stdio.h>

int main(int argc,char *argv[]){
    char a[]={'h','e','l','l','o'};
    char b[]="hello";
    char *pchar="hello";
    printf("pchar:%s\n",pchar);
    printf("b:%s\n",b);

    int len1=sizeof(a)/sizeof(a[0]);//建议用a[0]替换char,假设我们不知道类型
    int len2=sizeof(b)/sizeof(b[0]);
    printf("len1:%d\n",len1);
    printf("len2:%d\n",len2);
    return 0;
}

二、sizeof和strlen的区别

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值