知用网
白蓝主题五 · 清爽阅读
首页  > 软件安装

指针操作字符串处理:C语言中的实用技巧

在日常开发中,处理字符串是再常见不过的任务。尤其是在C语言环境下,没有现成的string类可用,这时候就得靠指针来“手动”管理字符串。很多人一开始觉得指针难,可一旦上手,就会发现它其实挺直接。

字符串本质就是字符数组

C语言里,字符串其实就是以\0结尾的字符数组。比如定义一个字符串:

char str[] = "hello";

系统会在内存中分配6个字节,最后一个是自动加上去的\0。而我们可以通过指针指向这个数组的首地址,然后逐个访问字符。

用指针遍历字符串

假设我们要统计字符串长度,不调用strlen,自己动手写一个:

int my_strlen(char *s) {
    int len = 0;
    while (*s != '\0') {
        len++;
        s++;
    }
    return len;
}

这里*s取的是指针当前指向的字符,s++让指针往后移一位。循环直到遇到\0结束。这种方式比用下标访问数组更贴近内存操作的本质。

修改字符串内容

注意,如果字符串是通过双引号定义的,比如:

char *s = "hello";
*s = 'H';  // 危险!可能崩溃

这种写法在某些系统上会出错,因为"hello"可能放在只读区。正确做法是用字符数组:

char s[] = "hello";
*s = 'H';  // 没问题,现在是可写的

这样就能安全地通过指针修改第一个字符,变成"Hello"。

拼接两个字符串

想把两个字符串连起来,也可以用指针操作。比如把src接到dest后面:

void str_concat(char *dest, char *src) {
    while (*dest) dest++;  // 移到dest末尾
    while (*src) {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
}

第一个while把dest指针移到\0的位置,第二个while把src的内容一个个拷过去,最后补上新的\0。这就是简易版的strcat。

实际应用场景

你在写一个配置解析工具,读到一行"name=张三",想把等号后面的值提取出来。用指针就很方便:

char *line = "name=张三";
char *value = strchr(line, '=');  // 找到'='
if (value) {
    value++;  // 跳过等号
    printf("值是:%s\n", value);  // 输出 张三
}

strchr返回的是指针,指向找到的字符位置,加一之后就指向后面的内容,干净利落。

指针操作字符串看起来低级,但在嵌入式、系统编程、性能敏感场景里非常实用。掌握这些小技巧,写代码时会更踏实。