我正在学习“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/