无法弄清楚为什么 strlen 会破坏 C 中的字符数组
Cannot figure out why strlen is corrupting character array in C
我正在学习 C,但我不明白为什么这段代码不起作用。我正在反转字符串,但 strlen 似乎破坏了输入。
我知道 scanf 可能很麻烦,所以我尝试用 fgets 替换 scanf(我还不想知道)我得到了完全相同的输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char inputstring[] = "";
char outputstring[] = "";
unsigned short int count = 0;
printf("Enter a string: ");
scanf("%s", inputstring);
count = strlen(inputstring) - 1;
printf("%s", inputstring);
for(int i = 0;i <= count;i++)
{
outputstring[count-i] = inputstring[i];
}
printf("%s", outputstring);
return 0;
}
当我编译并执行代码时,我得到:
输入字符串:你好
h
所以 printf 显示一个字符,然后是垃圾。
如果我注释掉 strlen 行,printf 会正确显示:
输入字符串:你好
你好
C 中的数组不是动态的,通过像您一样声明它们:
char inputstring[] = "";
char outputstring[] = "";
它们基本上是长度为 1 的固定大小的数组。
尝试用长度声明它们,例如
char inputstring[100] = "";
char outputstring[100] = "";
我正在学习 C,但我不明白为什么这段代码不起作用。我正在反转字符串,但 strlen 似乎破坏了输入。
我知道 scanf 可能很麻烦,所以我尝试用 fgets 替换 scanf(我还不想知道)我得到了完全相同的输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char inputstring[] = "";
char outputstring[] = "";
unsigned short int count = 0;
printf("Enter a string: ");
scanf("%s", inputstring);
count = strlen(inputstring) - 1;
printf("%s", inputstring);
for(int i = 0;i <= count;i++)
{
outputstring[count-i] = inputstring[i];
}
printf("%s", outputstring);
return 0;
}
当我编译并执行代码时,我得到:
输入字符串:你好 h
所以 printf 显示一个字符,然后是垃圾。
如果我注释掉 strlen 行,printf 会正确显示:
输入字符串:你好 你好
C 中的数组不是动态的,通过像您一样声明它们:
char inputstring[] = "";
char outputstring[] = "";
它们基本上是长度为 1 的固定大小的数组。 尝试用长度声明它们,例如
char inputstring[100] = "";
char outputstring[100] = "";