#include<stdio.h> #include<string.h> int main() {

#include<stdio.h>
#include<string.h>
int main()
{
int c, i, j, n, k = 1;
char m, a[40];
gets(a);scanf("%d",c);
while ( k <= c)
{scanf("%c%d",&m,&n);
if (m == 'R')
{
for (j = 1; j <= n; j++)
for (i = 0; i < strlen(a); i++)
{
a[0] = a[strlen(a)];
a[i + 1] = a[i];
}
puts(a);
}
else
{
for (j = 1; j <= n; j++)
for (i = 0; i < (strlen(a) - 1); i++)
{
a[strlen(a)] = a[0];
a[i] = a[i + 1];
}
puts(a);
}
k++;
}
return 0;
}请问这个代码错在哪里?segmentation fault

//从语法看,没问题,但是逻辑上有问题,存在 数组下标越界的情况.
//具体得看想实现什么功能.
#include<stdio.h>
#include<string.h>
int main()
{
int c, i, j, n, k = 1;
char m, a[40];
gets(a);scanf("%d",c);   //c 前加 &
while ( k <= c)
{scanf("%c%d",&m,&n);
if (m == 'R')
{
for (j = 1; j <= n; j++)
for (i = 0; i < strlen(a); i++)
{
a[0] = a[strlen(a)]; //第一次循环,a[strlen(a)]是'\0'
//第二次循环时strlen(a)==0
a[i + 1] = a[i];
}
puts(a);  //什么也不输出
}
else
{
for (j = 1; j <= n; j++) 
for (i = 0; i < (strlen(a) - 1); i++)
{
a[strlen(a)] = a[0]; //把结尾的 \0 换掉了
//在j 第二次循环时strlen(a)不确定,可能会造成下标越界
a[i] = a[i + 1];
}
puts(a); //输出的内容不确定
}
k++;
}
return 0;
}

追问

strlen测试的字符串长度不是不包括结束符'\0'吗

温馨提示:答案为网友推荐,仅供参考
相似回答