C语言string函数如何正确使用?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文
  1. 字符串的格式化输出:使用 printf 函数和 %s 格式化符来打印字符串。
  2. 取模运算:使用 运算符进行数学上的取模运算。

下面我们分别对这两部分进行详细说明。

c语言string
(图片来源网络,侵删)

字符串的格式化输出 (%s)

在 C 语言中,字符串是以字符数组的形式存在的,并以一个空字符 \0 作为结尾。printf 函数使用 %s 这个格式化符来处理和输出字符串。

%s 的工作原理

当你在 printf 中使用 %s 时,printf 会执行以下操作:

  1. 获取地址:它会读取 %s 对应的参数,这个参数必须是一个字符数组(或指向字符的指针),也就是字符串的起始地址
  2. 遍历并打印:从该地址开始,printf 会逐个读取字符,并将它们打印到标准输出(通常是屏幕)上。
  3. 遇到终止符停止:这个过程会一直持续,直到它读取到一个空字符 \0\0 是字符串的结束标志,printf 遇到它后就会停止打印。

代码示例

#include <stdio.h>
int main() {
    // 定义并初始化一个字符串
    char greeting[] = "Hello, World!";
    // 使用 %s 来打印整个字符串
    printf("The greeting is: %s\n", greeting);
    // 也可以直接使用字符串字面量
    printf("Another message: %s\n", "This is a direct string.");
    return 0;
}

输出:

The greeting is: Hello, World!
Another message: This is a direct string.

%s 的重要注意事项(常见错误)

错误示例:传递一个字符而不是字符串的地址

c语言string
(图片来源网络,侵删)
char c = 'A';
printf("%s\n", c); // 错误!

为什么会出错? %s 期望接收一个内存地址(指针),告诉你从哪里开始读取字符,但你传递的是一个字符 'A',它的值是整数 65printf 会把这个 65 当作一个内存地址去访问,这几乎肯定会引发段错误,导致程序崩溃。

正确做法: 如果你只想打印一个字符,应该使用 %c

char c = 'A';
printf("The character is: %c\n", c); // 正确!

取模运算 ()

是 C 语言中的一个算术运算符,称为模运算符取余运算符,它用于计算两个整数相除后的余数

语法

result = operand1 % operand2;

工作原理

a % b 的结果是 a 除以 b 后剩下的余数。

c语言string
(图片来源网络,侵删)
  • 操作数必须是整数类型(如 int, char, long 等),不能用于 floatdouble 类型。
  • 结果的符号:结果的符号与第一个操作数(operand1)的符号相同。

代码示例

#include <stdio.h>
int main() {
    int a = 10;
    int b = 3;
    int result = a % b;
    printf("10 %% 3 = %d\n", result); // 输出 1 (因为 10 = 3*3 + 1)
    int x = 10;
    int y = 5;
    printf("10 %% 5 = %d\n", x % y); // 输出 0 (因为 10 可以被 5 整除)
    int m = 11;
    int n = -4;
    printf("11 %% -4 = %d\n", m % n); // 输出 3 (结果的符号与 m 相同)
    int p = -11;
    int q = 4;
    printf("-11 %% 4 = %d\n", p % q); // 输出 -3 (结果的符号与 p 相同)
    return 0;
}

输出:

10 % 3 = 1
10 % 5 = 0
11 % -4 = 3
-11 % 4 = -3

的常见用途

  1. 判断奇偶数 如果一个数 n 对 2 取模为 0,说明它是偶数;否则是奇数。

    if (n % 2 == 0) {
        printf("%d is even.\n", n);
    } else {
        printf("%d is odd.\n", n);
    }
  2. 限制数值范围 在游戏开发或循环中,常用来将一个数值限制在某个范围内,创建一个 0 到 5 的循环索引。

    int max_index = 5;
    int current_value = 7;
    int index = current_value % (max_index + 1); // 7 % 6 = 1
    // index 的值永远是 0, 1, 2, 3, 4, 5
  3. 整除 获取一个数的某一位数字。

    int num = 12345;
    int last_digit = num % 10;     // 12345 % 10 = 5 (获取个位)
    int second_last = (num / 10) % 10; // (1234) % 10 = 4 (获取十位)

总结与区分

特性 %s (在 printf 中) (运算符)
名称 字符串格式化符 取模运算符 / 取余运算符
功能 从指定内存地址开始打印字符串,直到遇到 \0 计算两个整数相除后的余数。
使用场景 输出文本信息。 数学计算、条件判断、循环控制。
操作数 一个指向字符的指针(即字符串的起始地址)。 两个整数类型(int, char 等)。
返回值 printf 本身返回打印的字符数,%s 本身不返回值。 返回一个整数(余数)。
  • 当你看到 printf("%s", ...) 中的 %s,它是在处理字符串
  • 当你看到 a % b 这样的表达式,它是在进行数学运算
-- 展开阅读全文 --
头像
C语言define是什么?如何正确使用?
« 上一篇 04-18
dede需要php哪个版本?
下一篇 » 04-18

相关文章

取消
微信二维码
支付宝二维码

目录[+]