字符串反向没有新数组

Jon*_*ony 0 c arrays string

嗨,任何人都可以告诉我这个错误吗?

#include<stdio.h>

int main()
{
    char a[]="abcdefgh";
    int i=0;
    int n=strlen(a);
    char *first;
    char *second;
    char *c;
    *first=a[0];
    *second=a[7];
    for(i=0;i<=n/2;i++)
    {
            *c=*first;
            *first=*second;
            *second=*c;
            first++;
            second--;
    }

    for(i=0;i<=7;i++)
    {
            printf("%c",a[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 5

问题是这些问题:

*first=a[0];
*second=a[7];
Run Code Online (Sandbox Code Playgroud)

我认为你想要的是获得firstsecond指向正确的元素,即:

first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element
Run Code Online (Sandbox Code Playgroud)

你所拥有的是将值指定给a[0]指向的地址,该地址first未初始化.此外,您也可以n - 1在这里使用而不是7,因此您不需要硬编码大小.还有这些线:

*c=*first;
*first=*second;
*second=*c;
Run Code Online (Sandbox Code Playgroud)

你看,指针c还没有被初始化.你应该做的不是c指针:

char c;
Run Code Online (Sandbox Code Playgroud)

然后像普通变量一样使用它:

c = *first;
*first = *second;
*second = c;
Run Code Online (Sandbox Code Playgroud)

只是一个设计说明,你不需要计数器/ for-loop.相反,你知道你已经完成了second<= to first(也就是说,我们已经或已经越过了中途点):

while (second > first)
Run Code Online (Sandbox Code Playgroud)

最后,通过那里的一些空间!您的代码非常简洁,难以阅读.不要害怕把事情搞清楚.

  • GMan,你这个男人.先修好并稍后再抱怨......你一定是对你办公室的祝福. (2认同)