gpt4 book ai didi

c - 修改c中字符串的值

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:40 25 4
gpt4 key购买 nike

我正在尝试使用 for 循环更改字符串中的字符,这是我的代码:

#include <stdio.h>

int main(){
char h[] = "ABCDEFGH";
printf("h : %s\n", h);
int i = 0;
for(i; i<sizeof(h)-1; i++){
printf("i : %i\n", i);
printf("Starting value : %d\n", h[i]);
h[i] = "A";
printf("Test replace h[%u] : %d\n", i, h[i]);
}
printf("Final product : %s\n", h);
}

这是我的输出:

h : ABCDEFGH
i : 0
Starting value : 65
Test replace h[0] : 117
i : 1
Starting value : 66
Test replace h[1] : 117
i : 2
Starting value : 67
Test replace h[2] : 117
i : 3
Starting value : 68
Test replace h[3] : 117
i : 4
Starting value : 69
Test replace h[4] : 117
i : 5
Starting value : 70
Test replace h[5] : 117
i : 6
Starting value : 71
Test replace h[6] : 117
i : 7
Starting value : 72
Test replace h[7] : 117
Final product : uuuuuuuu

为什么每个索引处的值都是整数(迫使我使用 %d 而不是 %s)?这些数字代表什么?为什么最终产品是“uuuuuuuu”而不是“AAAAAAAA”?以及如何更改代码来完成我想做的事情?

最佳答案

您将字符串(双引号,以 0 结尾的字符数组表示为指向第一个字符的指针)与字符(单引号,小整数)混淆了。

这个:

h[i] = "A";

应该给你一个严重的编译器警告。您应该启用并检查所有警告。

应该是:

h[i] = 'A';

分配一个新的字符值。您的代码所做的是获取常量字符串 "A" 的地址(请记住:双引号是字符串)并将其粉碎为单个字符 h[i]。结果不可预测。

单个字符可以通过 %c 打印出来,也可以通过例如整数打印出来。 %d:

printf("on this machine, 'A' is %d\n", 'A');

上面的代码将在当今许多计算机上打印 65,因为用于表示字母 'A' 的字符编码值在 ASCII 和 Unicode 中是 65。

关于c - 修改c中字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com