簡體   English   中英

如何反轉字符串數組並使用指針反轉每個字符串?

[英]How to reverse an array of strings and reverse each string in place using pointers?

我正在學習C,並且試圖用指針將數組中的每個字符串反轉。 當我運行下面的代碼時,我得到警告,即傳遞'swapChars'的參數1和2會使指針從整數開始而沒有強制轉換。 運行它時,出現“總線錯誤”。 有人知道為什么嗎?

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

void swapChars(char *a, char *b) {
    char temp = *a; 
    *a = *b; 
    *b = temp; 
}


void reverse(int size, char* arr[]) { 
    for(int w = 0; w < size; w++) {
        int length = strlen(arr[w]); 
        for(int i = 0; i < length/2; i++) {
            swapChars(arr[w][i], arr[w][length-i]);
        }
    }
}

編輯:謝謝! 我不再有任何錯誤/警告,但是您知道為什么當我用“ hello world”運行它時它什么也不會打印嗎? 這是我的main():

int main(int argc, char* argv[]) {
    int numWords = argc-1;
    char** words = argv+1;
    reverse(numWords,words);
    for (char** word = words; word < words+numWords; word++) {
        printf("%s ",*word);
    }
    printf("\n");
    return 0;
}
swapChars( &(arr[w][i]), &(arr[w][(length-1)-i]));

您需要傳遞數組元素(或“指向”的指針)的地址,而不是數組元素本身的地址。 否則,編譯器會警告您它將嘗試將數組元素的值轉換為指針-懷疑這樣做是錯誤的。 因此它警告您。 確實-這不是您想要的。

@Pi比我更正確。 修復。 在第二個參數中添加-1,因為否則字符串末尾的null也將被反轉。 這就是為什么您的字符串不打印的原因。 大概。

傳遞參數時,將取消引用傳遞的兩個值。
要更正此問題,該行應顯示為

swapChars(&arr[w][i], &arr[w][length-1-i]);

這將傳遞地址,而不是值。

暫無
暫無

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

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