为什么 puts() 不打印任何东西

why puts() not printing anything

本文关键字:打印 任何东 puts 为什么      更新时间:2023-10-16
#include<iostream>
//#include<stdio.h>
using namespace std;
int main()
{
char mystr[20],rev[20];
int i,c=0;
cout<<"Enter a String: ";
gets(mystr);
for (i=0;mystr[i]!='';i++);
for (int j=i;j>=0;j--)
{
    rev[c]=mystr[j];
    c++;    
}
cout<<"Reverse is: ";
puts(rev);
return 0;
}

为什么 puts(( 不打印任何东西?如果我使用 for 循环打印字符串 rev 输出是正确的,但为什么 put 没有给出正确的输出?

因为rev的第一个符号在反向操作后,并且puts将字符串视为以 null 结尾的字符串。因此,它看到第一个字节为空并立即停止。

您可以通过以下方式修改循环:

for (i = 0; mystr[i] != ''; i++);
rev[i] = '';
for (int j = i-1; j>=0; j--)
{
    rev[c] = mystr[j];
    c++;    
}

一个问题是rev数组是本地数组并且没有初始化;这意味着不能保证生成的字符串具有所需的终止

您可以在调用 puts 之前添加rev[c]=''来修复此问题。

此外,您还需要从输入字符串中之前的字符开始,否则输出将以''开头,puts函数将在此处停止。

puts(( 将 \0 (null( 终止的字符串写入标准输出 (stdout( 并附加换行符 (''(。由于 rev 在第 0 位有 \0 个字符,puts(( 不打印任何内容。

您可以使用以下代码来还原 char 数组。

int lenth = strlen(mystr);
int pos = lenth-1;   // one posation before  char
int i = 0
for (; i <= pos; i++)
{
    rev[i] = mystr[pos-i];
}
rev[i] = '';

int lenth = strlen(mystr);
int start = 0;
int end = lenth-1;      // one posation before  char
for (; start < end; start++, end--)
{
    char t;
    t = mystr[start];
    mystr[start] = mystr[end];
    mystr[end] = t;
}

希望对您有所帮助!