嵌入式学习之路 15(C语言基础学习——指针操作一维字符型数组)

  1. 字符型数组的定义和初始化

    • char s[] = "hello";:在栈上开辟空间并初始化。
    • const char *p = "hello";:指针 p 指向字符串常量区的 "hello",只能读取不能修改。
  2. 指针变量的类型确定

    • 指针变量的类型由其所指向的数据的类型决定。
    • 例如,char * 指向字符型数据,int * 指向整型数据。
  3. 处理字符串的方式

    • 直接定义字符数组存储字符串。
    • 使用指针指向字符串常量。
  4. const 关键字

    • const 用于限定变量或指针的只读属性。
    • 如 const int a; 表示 a 是只读变量。
    • const char *s 和 char const *s 表示不能通过 *s 修改所指向的字符。
    • char * const s 表示指针 s 本身不能被修改。
    • const int * const s 表示指针和所指向的内容都不能被修改。
#include <stdio.h>
#include <string.h>

// 从标准输入获取字符串并存储到指定字符数组
char * Gets(char *s)
{
    char *ret = s;

    while ( (*s = getchar())!= '\n' )
    {
        s++;
    }
    *s = '\0';

    return ret;
}

// 输出字符串
int Pust(const char *s)
{
    while ( *s!= '\0' )
    {
        putchar(*s);
        s++;
    }
    printf("\n");

    return 0;
}

// 计算字符串长度
size_t Strlen(const char *s)
{
    const char *ret = s;
    while ( *s!= '\0')
    {
        s++;
    }

    return s - ret;
}

// 连接两个字符串
char *Strcat(char *dest, const char *src)
{
    char *ret = dest;

    while ( *dest!= '\0' )
        dest++;

    while ( *src!= '\0' )
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';

    return ret;
}

// 连接指定长度的两个字符串
char *Strncat(char *dest, const char *src, size_t n)
{
    char *ret = dest;

    while ( *dest!= '\0' )
        dest++;

    while ( *src!= '\0' && n )
    {
        *dest = *src;
        dest++;
        src++;
        n--;
    }
    *dest = '\0';

    return ret;
}

// 复制字符串
char * Strcpy(char *dest, char *src)
{
    char *ret = dest;

    while( *src!= '\0' )
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';

    return ret;
}

// 复制指定长度的字符串
char * Strncpy(char *dest, char *src, size_t n)
{
    char *ret = dest;

    while( *src!= '\0' && n!= 0 )
    {
        *dest = *src;
        dest++;
        src++;
        n--;
    }

    while ( n )
    {
        *dest = '\0';
        *dest++;
        n--;
    }

    return ret;
}

// 比较两个字符串
int Strcmp(const char *dest, const char *src)
{
    while ( *dest == *src && *dest!= '\0' && *src!= '\0' )
    {
        dest++;
        src++;
    }

    return *dest - *src;
}

// 比较指定长度的两个字符串
int Strncmp(const char *dest, const char *src, size_t n)
{
    while ( *dest == *src && *dest!= '\0' && *src!= '\0' && n > 1 )
    {
        dest++;
        src++;
        n--;
    }

    return *dest - *src;
}

// 主函数,用于测试上述函数
int main()
{
    // 定义并初始化字符数组 a
    char a[20];
    // 调用 Gets 函数获取用户输入并存储到 a 中
    Gets(a);

    char s[100];
    // 调用 Gets 函数获取用户输入并存储到 s 中
    Gets(s);

    // 调用 Strncmp 函数比较 a 和 s 的前 3 个字符,并输出结果
    printf("%d\n", Strncmp(a, s, 3));

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值