c输出错误的反向字符串

时间:2017-12-21 08:06:21

标签: c string

我正在编写一个程序来反转C中输入的字符串,我的代码是:

#include<stdio.h>
#include<string.h>
void main()
{
    int sz;
    printf("Enter the size of the string : ");
    scanf("%d",&sz);
    char str[sz];
    gets(str);
    printf("Enter the string : \n");
    gets(str);
    char str1[sz];
    int i =0;
    --sz;
    for(i=0;i<=sz;i++)    
    {
          str1[sz-i]=str[i];

    }
    printf("%s",str1);
}

这个程序正在为字符串大小8,9和10提供一个奇怪的输出 对于大小为8,正在打印反向字符串,后跟空格和2个垃圾字符,对于大小9,正在打印反向字符串,后跟2个垃圾字符;对于大小为10,反向字符串由垃圾字符和其他字符串打印程序运行正常的大小。为什么会这样?

1 个答案:

答案 0 :(得分:0)

注意:

  • 尝试通过询问用户来限制输入字符串是不明智的,用户仍然可以写出长度更大/更少的字符串
  • 从控制台读取字符串默认情况下不允许使用空格

第一个选项:
读取一个静态大小的字符串:

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

// Length of String
unsigned expected;

printf("Enter the length of the string: ");
scanf("%u", &expected);

char *temp; // Warning: Uninitialized

// Get string
printf("Enter the string: ");
scanf("%s", temp);

unsigned actual = strlen(temp);
unsigned length = actual > expected ? expected : actual;

char *string = (char *) malloc(length * sizeof(char));
char *reverse = (char *) malloc(length * sizeof(char));

 // Trim string to proper size
for (int i = 0; i < length; i++) {
  string[i] = temp[i];
}

// Reverse string
for (int i = 0, j = length - 1; i <= j; i++) {
  reverse[i] = string[j - i];
}

// Print Strings
printf("%s", string);
printf("\n%s", reverse);

第二个选项:
读取一个可变大小的字符串:

Cannot GET /index.php