1

当我尝试以相反的顺序打印字符串值时,我的控制台屏幕中出现空白输出。如果我使用 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();
}
4

3 回答 3

3

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

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

于 2012-11-24T03:16:50.720 回答
1

给你一些注意事项:

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

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

于 2012-11-24T03:18:41.190 回答