【发布时间】:2018-03-29 13:25:29
【问题描述】:
我正在研究“C 编程语言”并尝试反转 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;
}
【问题讨论】:
-
它是魔法,使用“你知道谁”的名字
-
看起来你没有做任何关于 0 终止反向副本的事情......
-
@codekaizer "不可逆转的人"
-
@John3136 语句“char tset[len+1]”不是将数组初始化为全零吗?
-
@DavidStevens C 不会进行任何初始化,除非您明确告诉它这样做。 (或者,简短的回答:“不”;-)
标签: c