繁体   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