#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'吗

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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网