如何反转字符串数组并使用指针反转每个字符串?
Posted
技术标签:
【中文标题】如何反转字符串数组并使用指针反转每个字符串?【英文标题】:How to reverse an array of strings and reverse each string in place using pointers? 【发布时间】:2012-06-26 05:20:28 【问题描述】:我正在学习 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;
【问题讨论】:
在您的swapChars
行中,第二部分应为arr[w][length-1-i]
,否则当i == 0 时尝试访问arr[w][length]
会出现内存访问错误。
这是一道经典的第一学期家庭作业题。这是你的家庭作业吗?它不想要 homework 标签吗?
或者面试问题,无论哪种方式,都不是在职类型的任务。
【参考方案1】:
swapChars( &(arr[w][i]), &(arr[w][(length-1)-i]));
您需要传入(或“指向”)数组元素的地址,而不是数组元素本身。如果没有这个,编译器会警告您它将尝试将数组元素的值转换为指针 - 它怀疑这是错误的做法。所以它会警告你。确实 - 这不是你想要的。
@Pi 比我更正确。修复。在第二个参数中添加 -1,否则字符串末尾的 null 也会被反转。这就是为什么您的字符串不打印的原因。大概吧。
【讨论】:
现在更有意义了。非常感谢你们!! :)【参考方案2】:当您传递参数时,您将取消引用您传入的两个值。 要更正此问题,该行应为
swapChars(&arr[w][i], &arr[w][length-1-i]);
这将传递地址,而不是值。
【讨论】:
以上是关于如何反转字符串数组并使用指针反转每个字符串?的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—344. 反转字符串(双指针)—day20