【C语言】字符串(main函数参数)

字符串

字符数组

#include <stdio.h>

int main(void)
{
        char word[]={'H','e','l','l','o',' ','w','o','r','l','d',};
        int i=0;
        int n=sizeof(word)/sizeof(word[0]);
        for (i=0;i<n;i++){
                printf("%c",word[i]);
        }
        printf("\n");
        return 0;
}

输出
在这里插入图片描述

字符串定义

1、以’\0’结束的一串字符;
2、 0标准字符串的结束,但他不是字符串的一部分;
3、字符串以数组的形式存在,以数组或指针(更多)的形式访问;
4、string.h头文件有很多处理字符串的函数。
字符串变量
char* str = “Hello”;
char word[] =“Hello”;
char word[10] = “Hello”; //加上结尾的’\0’,字符数组的长度是6
字符串常量
“Hello”
两个相邻的字符串常量会被自动连接起来
"hello "“world” =“hello world”
不同的定义方法用的地址不一样:
char* str = “Hello”;相当是const char* str = “Hello”;
str是一个指向字符串常量的指针(这段地址比较特殊,而且相同字符串的地址相同)
试图对str所指的字符串做写入会导致严重后果
如果需要修改字符串,应该用字符数组进行定义
char str2[] = “Hello”;

#include <stdio.h>

int main(void)
{
        int i=0;
        char* str = "Hello";
        char* str1 = "Hello";
        char str2[] = "Hello";
        printf("&i  =%p\n",&i);
        printf("str =%p\n",str);
        printf("str1=%p\n",str1);
        printf("str2=%p\n",str2);
        return 0;
}

运行结果
在这里插入图片描述

字符串特点
以字符数组的形式存在
不能用±*/运算符进行运算
通过数组的方式可以遍历字符串
使用指针还是数组定义字符串?
char* str = “Hello”
char word[] = “Hello”
指针:要处理一个字符串(对字符串只读)
1、处理参数
2、malloc动态分配空间
数组:要构造一个字符串(对字符串读写)
1、作为本地变量空间,自动被回收

字符串输入输出scanf&printf

#include <stdio.h>

int main(void)
{
        char* str = "Hello";
        char str2[] = "Hello";
        printf("str =%s\n",str);
        printf("str2=%s\n",str2);
        char str3[3];
        char str4[3];
        scanf("%s%s",str3,str4);
        printf("%s##%s\n",str3,str4);

        return 0;
}

在这里插入图片描述
1、scanf输入一个单词(空格、tab或回车为止)
2、scanf不知道字符大小,上述截图字符超过定义的长度依然正常输入。
字符串输入应该单独使用一个scanf函数,而且能够设置输入的大小

#include <stdio.h>

int main(void)
{
        char str3[3];
        char str4[3];
        scanf("%2s",str3);
        scanf("%s",str4);
        printf("%s##%s\n",str3,str4);
        return 0;
}

在这里插入图片描述
常见错误
1、定义了指针变量误以为定义了字符串变量直接使用(运行的时候不一定出错)
char* str;
scanf("%s",str);
2、空字符串
char str[] = “”; //空字符串,无法存放字符
char str[10] = “”; //长度是10,str[0] = ‘\0’

字符串数组

char **a;
char a[][];
二位字符串数组第二维要有固定的大小

#include <stdio.h>

int main(void)
{
        char a[][10] = {
                "hello",
                "1234567890",
        };
        printf("%s##\n",a);
        printf("%s##\n",a[1]);
        return 0;
}

在这里插入图片描述

上面的char a[][10]可以替换为char* a[]输出结果不同,以下是改成char* a输出结果的
在这里插入图片描述

main函数参数

int main(int argc,char const *argv[])
argc是参数个数,argv是参数组成的字符串数组
参考代码

#include <stdio.h>

int main(int argc,char const *argv[])
{
        int i;
        for (i=0;i<argc;i++){
                printf("main参数%d:%s\n",i,argv[i]);
        }
        return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值