我正在编写这个编程问题,我在10个测试用例中有大约30个字符的反向字符串。
我的代码是: -
#include <stdio.h>
#include <string.h>
int main () {
int t;
scanf("%d",&t);
while (t--) {
char str[30];
scanf("%s",&str);
char revStr[30];
int len = strlen(str);
int i = 0;
int j = len-1;
while (i < len) {
revStr[i] = str[j];
i++; j--;
}
printf("%s\n",revStr);
}
return 0;
}
如果输入字符串大于前一个字符串,则输出会出现乱码。
例如,
如果last-string
有6
个字符,例如rocket\0
和new-string
,fun\0
有3
个字符,则输出为{{ 1}}。
答案 0 :(得分:1)
char str[30];
scanf("%s",&str);
^ don't pass address of array
这会起作用 -
scanf("%29s",str);
答案 1 :(得分:0)
试试这个:
int t; scanf(&#34;%d&#34;,&amp; t);
while (t--)
{
char str[30] = { 0 };
scanf("%s", &str);
char revStr[30] = { 0 };
int len = strlen(str);
int i = 0;
int j = len - 1;
while (i < len) {
revStr[i] = str[j];
i++; j--;
}
printf("%s\n", revStr);
}
答案 2 :(得分:0)
您需要进行两项更改
首先将scanf("%s",&str);
更改为
scanf("%s",str);
其次,在while循环之后,您没有创建最后一个元素rev
字符串\0
。在printf语句之前添加这一行。
revStr[i] = '\0';
这可以解决您的问题。