C语言编程,分段故障转储

C语言编程,分段故障转储,c,arrays,string,reverse,C,Arrays,String,Reverse,我正在尝试制作一个程序,它接收“Hello”的输入,并通过颠倒字符顺序输出“olleH”。然而,我不断得到一个分割错误,我不明白为什么 #include <stdio.h> #include<string.h> int main() { int i; int size; char s[100],a[100]; printf("Enter the word you want to get reversed: "); scan

我正在尝试制作一个程序,它接收“Hello”的输入,并通过颠倒字符顺序输出“olleH”。然而,我不断得到一个分割错误,我不明白为什么

#include <stdio.h>
#include<string.h>

int main()
{   
    int i;
    int size;
    char s[100],a[100];

    printf("Enter the word you want to get reversed: ");
    scanf("%s",s);


    while(s[i]!='\0')
 {
   a[i]=s[i];
     i++;
 }

size=sizeof(s);

    while(i<sizeof(s))
    {
        s[i]=a[size];

    }

    printf("The reversed string is : %s",s);


}
#包括
#包括
int main()
{   
int i;
整数大小;
chars[100],a[100];
printf(“输入要反转的单词:”);
scanf(“%s”,s);
而(s[i]!='\0')
{
a[i]=s[i];
i++;
}
尺寸=尺寸f(s);

而(i问题在于这一部分:

size=sizeof(s);

while(i<sizeof(s))
{
    s[i]=a[size];
}
size=sizeof(s);

而(i另一种简单的反转字符串的方法

试试这个:

while(s[++i]!='\0'); // find the size of string

    while(i>=0)
     a[j++] = s[--i]; // reverse the string

    a[j]='\0';
    printf("The reversed string is : %s",a);
这个while循环

while(i<sizeof(s))
{
    s[i]=a[size];

}
始终相同,并再次引用数组外的内存

考虑到程序中未使用
中声明的函数。因此可以删除标头

程序可以按以下方式运行

#include <stdio.h>

#define N   100

int main() 
{
    char s[N], d[N];

    printf( "Enter the word you want to get reversed: " );
    fgets( s, N, stdin );

    size_t n = 0;

    while ( s[n] != '\0' && s[n] != '\n' ) n++;

    for ( size_t i = 0; i != n; i++ ) d[i] = s[n-i-1];
    d[n] = '\0';

    printf( "The reversed string is : %s\n", d );

    return 0;
}
#包括
#定义N 100
int main()
{
字符s[N],d[N];
printf(“输入要反转的单词:”);
fgets(南、北、标准差);
尺寸n=0;
而(s[n]!='\0'和&s[n]!='\n')n++;
对于(大小i=0;i!=n;i++)d[i]=s[n-i-1];
d[n]='\0';
printf(“反向字符串为:%s\n”,d);
返回0;
}
您可以在不使用辅助数组的情况下反转字符串

#include <stdio.h>

#define N   100

int main() 
{
    char s[N];

    printf( "Enter the word you want to get reversed: " );
    fgets( s, N, stdin );

    size_t n = 0;

    while ( s[n] != '\0' && s[n] != '\n' ) n++;
    s[n] = '\0';

    for ( size_t i = 0; i < n / 2; i++ )
    {
        char c = s[i];
        s[i] = s[n-i-1];
        s[n-i-1] = c;
    }

    printf( "The reversed string is : %s\n", s );

    return 0;
}
#包括
#定义N 100
int main()
{
chars[N];
printf(“输入要反转的单词:”);
fgets(南、北、标准差);
尺寸n=0;
而(s[n]!='\0'和&s[n]!='\n')n++;
s[n]='\0';
对于(大小i=0;i
提示:
size=sizeof(s);
是错误的…
while(我还要注意,
i
是未初始化使用的,这是UP的另一个漏洞?可能的答案太多,或者好的答案对于这种格式来说太长。请添加详细信息以缩小答案集或隔离一个可以在几段中回答的问题。
#include <stdio.h>

#define N   100

int main() 
{
    char s[N];

    printf( "Enter the word you want to get reversed: " );
    fgets( s, N, stdin );

    size_t n = 0;

    while ( s[n] != '\0' && s[n] != '\n' ) n++;
    s[n] = '\0';

    for ( size_t i = 0; i < n / 2; i++ )
    {
        char c = s[i];
        s[i] = s[n-i-1];
        s[n-i-1] = c;
    }

    printf( "The reversed string is : %s\n", s );

    return 0;
}