c - 处理存储在指向 C 中多个字符串的指针数组中的单个字符串的问题

标签 c arrays string pointers

提供了一个指向字符串的指针数组作为输入。任务是反转存储在输入指针数组中的每个字符串。我创建了一个名为 reverseString() 的函数,它反转传递给它的字符串。据我所知,此功能正常工作。

输入指针数组中存储/引用的字符串被一个一个地发送到reverseString()函数。但是当使用临时变量交换传递的字符串的值时,代码在 reverseString() 函数中的某个时刻挂起。我不明白为什么代码在交换值时挂起。请帮我解决这个问题。

代码如下:

#include <stdio.h>
void reverseString(char*);

int main()
{   char *s[] = {"abcde", "12345", "65gb"};
    int i=0;
    for(i=0; i< (sizeof(s)/sizeof(s[0]) ); i++ )
    {   reverseString(s[i]);
        printf("\n%s\n", s[i]);
    }

    getch();
    return 0;
}//end main

void reverseString(char *x)
{   int len = strlen(x)-1;
    int i=0; 
    char temp;
    while(i <= len-i)
    {   temp = x[i];
        x[i] = x[len-i];
        x[len-i] = temp;
            i++;
    }
}//end reverseString

最佳答案

您正在尝试更改字符串文字。

字符串文字通常是不可修改的,实际上应该声明为const

const char *s[] = {"abcde", "12345", "65gb"};
/* pointers to string literals */

如果你想制作一个可修改的字符串数组,试试这个:

char s[][24] = {"abcde", "12345", "65gb"};
/* non-readonly array initialized from string literals */

编译器会自动判断你需要3个字符串,但无法判断每个字符串需要多长。我将它们设为 24 字节长。

关于c - 处理存储在指向 C 中多个字符串的指针数组中的单个字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726350/

相关文章:

C++:是否建议创建自己的 String 类?

c - Emacs 将 (*ptr_to_struct).member_var 替换为 ptr_to_struct->member_var

c++ - 添加 base62 数字

php - 如何在 php 中使用 in_array 并将数组作为针,但在至少有一个值匹配时返回 true

c++ - 为什么在使用堆叠 std::array 声明多维数组时需要 "double braces"?

java - 在时间复杂度很重要的情况下从值数组映射键值

python - 如何加入满足特定条件的列表元素?

C - select() - 如何正确更新计时器

c - 我需要释放 strtok 结果字符串吗?

python - 这个编码是什么以及如何转换它?