c - 为什么我的“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);
}
如果有人可以帮助我,我将不胜感激
解决方案
@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);
...
推荐阅读
- java - 春季启动图片上传不成功
- matplotlib - matplotlib:将图例与字幕对齐(文本底部,垂直对齐)
- python - 如何获取一些数据框列的字符串?
- angular - 在Angular中使用复选框选择列
- html - 对齐主要部分中的图像
- vue.js - 从mounted中调用的方法更新数据值
- autodesk-forge - BIM360 文档中删除的文件夹和 BIM360 数据管理 API 中的 hidden:true 不会渗透到子级
- python - 如何将 GEKKO 解决方案转换为浮点数
- r - 如何在 rmarkdown/knitr 中顺序输出部分(基数 r)图?
- c# - c# - Microsoft Graph API - DriveItem 上的权限不起作用