首页 > 解决方案 > 为什么我的“c”变量在 for 循环中到达第三个循环时呈指数增长?

问题描述

我遇到了一个问题,这里有一个程序是一个数据输入例程,有问题的问题是变量 c 去 capac 函数询问用户字符串的最大容量,当它达到for 的第 3 个周期开始增长,天知道如何使我的 for 变得无法使用。

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


int func_carac(int *car) //function that catches characters introduced by the user
{
  int caracter;

  printf("\nType the character you want: \n");
  caracter = getche();

  *car = caracter;
  return *car;
}

//________________________________________________________\\

int func_capac(int *cap) //function to ask the user for the amount of characters
{
  int quant;

  printf("\nDetermine the maximum character capacity you want to write: ");
  scanf("%d",&quant);

  *cap = quant;

  return *cap;
}

int main()
{
  int car, pos, c, total;
  char vetor[] = {'\0'};

  func_capac(&c);

  total = c + 1;
  vetor[total];
  vetor[total] = '\0';
  printf("%i", c);

  for(pos = 0; pos < c; pos++)
   {
    func_carac(&car);
    if((car >= 97) && (car <= 122) || (car == 32))
     {
      printf("\n%c - Tabela ASCII, %d \n",car ,car);
      printf("%i", c);
    
      vetor[pos] = (char) car;
     }
    else if(car == 8)
     {
      printf("Successfully removed the previous character.");
      pos = pos-2;
     }
    else
     {
      pos--;
     }
   }
  printf("Frase: %s\n",vetor);
}

如果有人可以帮助我,我将不胜感激

标签: cstringfunctionfor-loop

解决方案


@Someprogrammerdude 搞定了。 vector[] = { '\0' }表示向量是长度为 1 的数组。当您在位置 0 之后写入向量时,最终会出现未定义的行为(即以某种方式覆盖 c)。这是最小的修复:

int main()
{
    int car, pos, c, total;

    func_capac(&c);
    total = c + 1;

    char vetor[total];
    for(int i = 0; i < total; i++) vetor[i] = 0; // or memset(vector, 0, total);
    ...

推荐阅读