帮我看看下面这段C语言程序当我输入“ABCD”是,输出的结果不是“ABCDDCBA” #include <conio.h> #include <stdio.h> #include <string.h> void fun(char *str,char *t) {int i,d; d=*str for(i=0;i<d;i++) *(t+i)=*(str+i); for(i=0;i<d;i++) *(t+d+i)=*(str+d-1-i); *(t+2*d)='\0'; } main(){ char s[100],t[100]; printf("\nPlease enter string S:"); scanf("%s",s); fun(s,t); printf("\nThe result is: %s\n",t); }
时间: 2024-03-12 10:45:06 浏览: 120
在这段程序中,变量 d 的值应该是字符串长度,但是却没有进行字符串长度的计算,而是直接将字符串第一个字符的 ASCII 码作为长度,所以当输入的字符串的第一个字符的 ASCII 码不是字符串长度时,程序就会出现错误。
例如,当输入字符串为“ABCD”时,程序会将字符 'A' 的 ASCII 码 65 作为字符串长度,因此只会复制字符串的前 65 个字符,然后程序会继续执行,将字符串的后 65 个字符再次复制到新的字符串中,这就导致了输出结果不是“ABCDDCBA”。
要解决这个问题,可以使用库函数 `strlen()` 来计算字符串的长度,将其作为参数传递给函数 `fun()`。修改后的程序如下:
```c
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun(char *str, char *t) {
int i, d;
d = strlen(str);
for (i = 0; i < d; i++)
*(t + i) = *(str + i);
for (i = 0; i < d; i++)
*(t + d + i) = *(str + d - 1 - i);
*(t + 2 * d) = '\0';
}
int main() {
char s[100], t[100];
printf("\nPlease enter string S:");
scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
return 0;
}
```
这样,无论输入的字符串是什么,程序都能正确输出“ABCDDCBA”。
阅读全文