如何使用指针反转字符串数组并将每个字符串反转到位?

时间:2012-06-24 20:52:44

标签: c 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”运行它时它不会打印任何东西吗? 这是我的主要():

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;
}

2 个答案:

答案 0 :(得分:3)

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

您需要传入(或&#34;指向&#34;的指针)数组元素的地址,而不是数组元素本身。如果没有这个,编译器会警告你它将尝试将数组元素的值转换为指针 - 它怀疑这是错误的做法。所以它会警告你这件事。事实上 - 这不是你想要的。

@Pi比我更正确。固定它。在第二个参数中添加-1,否则字符串末尾的null也会反转。这就是你的字符串不打印的原因。可能。

答案 1 :(得分:2)

当您传递参数时,您将取消引用传入的两个值 要更正此问题,该行应为

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

这将传递地址,而不是值。