簡體   English   中英

用指針反轉c中的字符串

[英]reversing a string in c with pointer

我只是在學習C,並且正在嘗試編寫一個函數,該函數不使用索引而是通過指針而不使用malloc來反轉字符數組(字符串):

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

char* reverse(char* chararray)
{    
    char *forward = chararray;
    char *reversed = &chararray[strlen(chararray)-1];

    while (reversed > forward) {
        char revTmp = *reversed;
        char fwdTmp = *forward;

        *reversed-- = fwdTmp;
        *forward++ = revTmp;
    }   

    return reversed;
}

int main()
{
    char string[] = "dlrow olleh";
    printf("%s\n",reverse(string));
    return 0;
}

現在的輸出是world ,應該是hello world但它在中間中斷,我不知道為什么。 我一定錯過了一些東西。

reversed后將指向字符串的中間。 因此,您將僅打印字符串中從該位置開始的內容(在本例中為“世界”)。 您也可以通過打印string來驗證這一點,並查看它確實被反轉了。

而是返回原始指針chararray

您返回的是reversed ,它指向字符串的中間。

您不需要返回任何內容,因為您將在原處反轉輸入字符串。

換句話說,您正在使用相同的存儲塊( string )進行輸入和輸出。


只需調用該函數,然后打印該字符串即可:

reverse(string);
printf("%s\n",string);

除此之外,您還可以更改此設置:

char* reverse(char* chararray)
{
    ...
    return reversed;
}

對此:

void reverse(char* chararray)
{
    ...
}

暫無
暫無

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

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