簡體   English   中英

沒有新數組的字符串反向

[英]string reverse without new array

嗨,有人可以告訴我這個錯誤嗎?

#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]);
    }
}

問題是這些行:

*first=a[0];
*second=a[7];

我想你想要的是獲得firstsecond指向正確的元素,那就是:

first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element

您所擁有的是將a[0]的值分配給first指向的地址,該地址尚未初始化。 另外,您最好在這里使用n - 1而不是7,因此您不必對大小進行硬編碼。 另外這些行:

*c=*first;
*first=*second;
*second=*c;

您會看到,指針c也尚未初始化。 您不應該使用c作為指針:

char c;

然后像使用普通變量一樣使用它:

c = *first;
*first = *second;
*second = c;

只是設計說明,您不需要計數器/循環。 相反,您知道您完成的second是<=到first (即我們已經或已經越過了中點):

while (second > first)

最后,穿過那里的一些空間! 您的代碼非常簡潔,難以閱讀。 不要害怕將事物間隔開。

    *first=a[0];

指針first未初始化,因此您正在分配給無效的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM