使用指针反转字符串的 C 代码

标签 c arrays pointers character

#include <stdio.h>

main() 
{
    char* str;
    char* strrev;
    int   i = 0;
    int   j = 0;
    int   c;

    printf("Enter the string\n");
    scanf("%[^\n]%*c", str);

    while (*(str + i) != '\n')
    {
        i++;
    }

    for (c = i; c >= 0; c--)
    {
        *(strrev + j) = *(str + c);
        j++;
    }
}

这是我反转字符串的代码。当我编译代码时,它给出了错误segmentation failure。请有人帮助我理解错误并认识到我的错误。 谢谢

最佳答案

有很多问题:

  • 您永远不会为 strstrrev 分配内存。这就是它崩溃的原因;写入未初始化的指针会调用未定义的行为,通常会导致段错误。
  • 当您可以只使用 fgets() 时,您正在使用 scanf() 进行复杂的转换。
  • 您应该使用 strlen() 而不是循环查找字符串结尾。

关于使用指针反转字符串的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000465/

相关文章:

c - 添加更多线程在什么时候停止帮助?

arrays - 满足以下关系的数组中的最长序列 X[ i ] = X[ i-1 ] + X [ i-2 ]

c++ - "array bound is not an integer constant before ' ] ' token"使用多个文件时

java - 如何索引数组以从 1 而不是 0 开始?

c - 函数中的指针语法

c - 当子进程上有 SIGINT (Crtl+c) 时,waitpid 返回 0

c - 使用 ProtoBuf 将数据流式传输到带有 header 的日志文件

C++ 新的 std::vector of pointers

pointers - 在Go中修改字段值以构造指针

c - c中数据类型的大小