c - 如何反转字符串数组并使用指针反转每个字符串?

标签 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”运行它时它不打印任何东西吗? 这是我的 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 也会被反转。这就是为什么您的字符串不打印的原因。可能吧。

关于c - 如何反转字符串数组并使用指针反转每个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181102/

相关文章:

c++ - 使用指向 typedef 固定长度数组的指针执行 memcpy 时是否需要取消引用?为什么或者为什么不?

c - 我在这个 C 程序中使用的指针正确吗?

c - Netbeans C 代码格式

检查是否可以通过连接较小的字符串来制作字符串

转换后的字符串未能包含正确的 float 值

c - 我是否正确传递了这些变量? C编程

c++ - 将指针传递/复制到另一个指针

c - 为什么控制台程序打印目录列表而不是命令行参数?

c - 具有 k 个钉子的汉诺塔谜题的最优 C 实现

c - 错误: invalid type argument of '->' (have 'struct node' )