【发布时间】:2021-03-30 14:29:46
【问题描述】:
这是一个简单的排序代码:
#include <stdio.h>
int main(void) {
int i, j;
char str[] = "Hello!! How are you?? I'm Fine. No Thank you.", temp;
for (i = 0; i < sizeof(str); i++) {
for (j = i + 1; j < sizeof(str); j++) {
if (str[i] > str[j]) {
temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}
}
for(i = 0; i < sizeof(str); i++)
printf("%c", str[i]);
printf("%s", str);
}
我发现我可以通过for循环逐个字符地打印排序的字符串,但不能打印printf("%s", str);,它不会打印任何东西,有人能告诉我为什么以及如何解决这个问题吗?
【问题讨论】:
-
因为你的第一个字符显然是
\0。打印printf("%d %d\n", strlen(str), str[0]); -
使用
strlen(str)而不是sizeof(str)。后者包括 NUL,也可能包括填充等内容。 -
同样在循环前使用
strlen将长度读入临时变量。 -
您已经对字符串中的字符进行了排序,不经意包括终止 NUL 字符。终止 NUL 字符已移动到字符数组的前面,使数组看起来像一个空字符串。正如其他人所指出的那样,这是因为您使用包含终止字符的
sizeof(str)来计算字符,而不是strlen(str),后者只会计算该 char 数组的“字符串”解释中的字符数。跨度> -
strlen()也不是真正需要的。i < sizeof(str)-->str[i] != 0.
标签: c printf bubble-sort