c - 每当我在输出端打印时出现额外字符
问题描述
我正在尝试将 FLAMES 程序作为作业执行,由于我无法在此处准确发布我的整个代码,我将输入似乎导致我错误的代码部分,因为每当我打印出一些东西时,都会出现意外输出附带的额外字符。
我使用了与此类似的代码:
int main(){
char chari[100], temp[100];
int i, c;
printf("Enter a name: \n");
scanf(" %[^\n]s", chari);
for (i=1; chari[i]!='\0'; i++)
{
printf("%i\n", i);
}
c = i;
for (i=0; i<c; i++)
{
printf("%i < %i\n", i, c);
temp[i] = chari[i];
}
printf("%s \n", temp);
return 0;
}
我已经调整代码几个小时了,但我似乎仍然找不到问题所在。我还在计算字符串中的字母数,以便稍后停止我的程序的某些部分。
输入:酷
预期输出:酷
实际输出:cool(<-t
解决方案
您忘记复制终止空字符。
在您的第一个循环c = i;
保存 0 字节的索引之后。在第二个循环中,您运行 until i < c
,即您不复制该 0 字节而无需终止 nul 您的字符串只要在内存中找到另一个随机 0 字节即可。
在函数中,只有静态变量被初始化。因此,您的temp
数组包含不确定的值,您不能依赖在需要的地方获得 0 字符。
您需要再复制 1 个字节。
推荐阅读
- java - 根据给定条件返回列表元素对
- javascript - ×TypeError:无法读取未定义的属性“边框”
- python - PythonChess - 获取引擎来预测一个位置的最佳移动列表
- linux - 如何在不使用 sudo 且不在根目录下运行 man ?
- integration - 迄今为止,人工制品将人工制品标记为“集成”不起作用
- ruby - 这是很好的解决方案吗?
- php - PHP 出现错误:在设置标头('charset=utf-8')中找不到文件;
- python - 井字游戏的 If 语句问题
- airflow - 如何在 Airflow 中使用 SimpleHttpOperator
- android - 可观察的 RxJava 测试“重复”在测试中创建无限循环