【问题标题】:Printing the string value in Reverse [closed]反向打印字符串值[关闭]
【发布时间】:2012-11-24 03:11:48
【问题描述】:

当我尝试以相反的顺序打印字符串值时,我在控制台屏幕中得到一个空白输出。如果我使用 for 循环打印字符串值正在打印,但是当我简单地使用 %s 打印时,它没有打印?为什么?

#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()
{
    char name1[10],name2[10];
    int i,len,j;

    clrscr();

    printf("\nEnter the string that u want to get reversed:");
    scanf("%s",&name1);
    for(i=0;name1[i]!='\0';i++);
    len=i;

    j=i;

    for(i=0;i<=len;i++)
    {
        name2[i]=name1[j];
        j--;
    }

    printf("\nThe reversed string is:");
    printf("%s",name2);
    getch();
}

【问题讨论】:

标签: c string printing reverse


【解决方案1】:

您通过将原始的 nullchar 终止符作为第一个字符来开始反转字符串。因此就printf()而言,它是一个空字符串(零长度)。

除此之外,这需要认真代码审查。老实说,这不是适合它的地方,因为对正确论点的审查可能会重写整个事情(可能除了开头 scanf() 和结尾 printf()。我强烈建议您执行此步骤-在调试器中逐步查看代码运行时发生的情况。

【讨论】:

  • 并且第一个写入的单个字符是 ASCII NUL '\0',它不会以可见的表示形式出现。
  • @JonathanLeffler 如果我对这个计数器进行了数学计算,我认为结果是领先都以 ASCI NUL 结尾。我已经方式火鸡太多了,不能在晚上的这个时候详细说明=P
  • 代码审查:codereview.stackexchange.com
【解决方案2】:

给你的一些注意事项:

  • 在发布之前正确格式化您的代码
  • 您使用了太多“printf”来查看变量值。 这意味着你不知道如何正确调试你的代码 请谷歌如何调试代码+“您正在使用的IDE名称” (fe. 如何调试代码 VISUAL STUDIO)
  • 始终在您的代码中添加注释
  • 在发布类似内容之前,请先 GOOGLE! “反转字符串”问题是典型的“编程入门”作业 并且不难找到一个示例代码。一开始的代码学习更多 比随机输入一些废话更有用
  • 你应该给你的变量起更有意义的名字 f.e.在您的情况下,'src' 和 'target' 比 name1 和 name2 更好的选择 当然,在这么短的代码中它并不重要,但要尽快适应它
  • 尝试在开始编码之前先在纸上解决此类问题以进行可视化
  • 由于您尝试通过读取用户输入来处理动态字符串内容,因此使用动态分配(即 malloc()/free())比使用修复数组更好。

【讨论】:

    【解决方案3】:

    您总是可以只使用标准 string.h 库中的 strrev 函数

    【讨论】:

    • 那是什么标准? (提示:它不是 ISO/IEC 9899:2011 中的标准——C 标准;也不是 POSIX 中的标准。)
    • 你是对的。抱歉,我是从错误的资源中阅读的。
    • 它可能是其他库,当您使用该库时,它可能在&lt;string.h&gt; 中声明,因此它可能看起来像是“标准”。也就是说,die.net 无法识别它,Is strrev() function not available on Linux 表明它不是 GNU C 库 glibc
    猜你喜欢
    • 1970-01-01
    • 2022-06-18
    • 2013-12-17
    • 2018-02-19
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多