gpt4 book ai didi

c - 反转字符串时长度增加

转载 作者:行者123 更新时间:2023-12-04 12:27:46 25 4
gpt4 key购买 nike

我正在学习“The C Programming Language”并尝试反转 C 风格的字符串。我的理解是,像“voldemort”这样的字符串文字表示为 9 个字符后跟一个空字符的字符数组(每个数组的大小为 1):

v o l d e m o r t \0
_ _ _ _ _ _ _ _ _ _

我对字符串进行反转的想法是找到长度,然后使用它来声明一个适当长度的数组并将其定义为反转,并在末尾保留一个空值。

t r o m e d l o v \0
_ _ _ _ _ _ _ _ _ _

但是,在我反转的字符串中,长度突然变长了,我不知道为什么。

#include <stdio.h>

int mystrlen(char s[]);
void reverse(char original[], char reversed[], int len);

int mystrlen(char s[]) {
int i = 0;
while (s[i] != '\0') {
++i;
}
return i;
}

void reverse(char original[], char reversed[], int len) {
int i, c;
for (i = 0; i < len; ++i) {
reversed[i] = original[len-i-1];
}
}

int main() {
int len;
char test[] = "voldemort";
len = mystrlen(test);
char tset[len+1];
reverse(test, tset, len);
printf("Original: %s\n", test);
printf("Original Length: %d\n", mystrlen(test)); // 9
printf("Original Size: %lu\n\n", sizeof(test)); // 10

printf("Reversed: %s\n", tset);
printf("Reversed Length: %d\n", mystrlen(tset)); // 13 (expected: 9)
printf("Reversed Size: %lu\n", sizeof(tset)); // 10
return 0;
}

最佳答案

一旦你反转字符串需要NUL终止

   void reverse(char original[], char reversed[], int len) {
int i, c;
for (i = 0; i < len; ++i) {
reversed[i] = original[len-i-1];
}
reversed[i] = '\0'; //this line required
}

输出:

Original: voldemort
Original Length: 9
Original Size: 10

Reversed: tromedlov
Reversed Length: 9
Reversed Size: 10

关于c - 反转字符串时长度增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49547606/

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