c - 我如何防止 C 中的字符串数组的其余部分被垃圾填充?
问题描述
我正在开发一个用户输入姓名列表的练习程序。我将字符串数组设置为 50 长,以便为用户提供足够的空间,但如果完成,他们可以键入“退出”以停止键入。我怎样才能使数组的其余部分不被垃圾填充或可能缩小它以仅适合输入的列表。
#include <stdio.h>
#include <string.h>
int main()
{
char list[50][11];
char temp[11];
int index;
printf("Input a list of names type 'quit' to stop\n")
for(index = 0; index < 50; index++)
{
scanf(" %10s", temp);
if(strcmp(temp, "quit") != 0)
{
strcpy(list[index], temp);
}
else
{
index = 50;
}
}
for(int index = 0; index < 50; index++)
{
puts(list[index]);
}
return 0;
}
解决方案
IMO 这是一个编程禅宗问题,UnholySheep 正在促使你朝着正确的方向思考。
什么是垃圾?您已经告诉计算机您需要一个包含 50 项内容的列表,但您没有告诉它在所有这些列表条目中放入什么。所以计算机只使用它周围的任何内存,并且特定字节的几率是你决定的任何值不是垃圾是像 1:256。
当然,这里的禅并不是“什么是垃圾”这个问题的答案,而是理解有垃圾和非垃圾,唯一的非垃圾就是你安排存在的东西。
因此,如果您不知道内存地址不包含垃圾,那么它确实存在。
那么,您的编程问题的解决方案是跟踪有多少列表条目不是垃圾。为此,C 中有两种常用方法:
- 跟踪列表的长度,或
- 在列表末尾添加一个特殊值
推荐阅读
- javascript - 如何在 Vue JS 中切换内容,将字符串传递给数据
- kubernetes - 如何使 PersistentVolumeClaim 重新获得对动态配置的已发布 PersistentVolume 的访问权限
- java - Swagger Key 与不同的参数重复并返回
- javascript - 使用 Canvas 在图像中绘制线条
- encoding - Hive 查询扰乱了法语字符
- wsl-2 - DDEV-Local WSL2:如何让 xdg-open 从 WSL2 打开 Windows 上的浏览器?
- postgresql - Postgres 表分区列表限制
- php - WooCommerce:获取自定义帖子类型 ID 或特定订单状态电子邮件通知
- javascript - 带有 Vitcroy 图表的径向条形图
- excel - Internet Explorer readyState 从 Complete 恢复为 Interactive