首页 > 解决方案 > 我如何防止 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;
}

标签: carraysc-strings

解决方案


IMO 这是一个编程禅宗问题,UnholySheep 正在促使你朝着正确的方向思考。

什么是垃圾?您已经告诉计算机您需要一个包含 50 项内容的列表,但您没有告诉它在所有这些列表条目中放入什么。所以计算机只使用它周围的任何内存,并且特定字节的几率是你决定的任何值不是垃圾是像 1:256。

当然,这里的禅并不是“什么是垃圾”这个问题的答案,而是理解有垃圾和非垃圾,唯一的非垃圾就是你安排存在的东西。

因此,如果您不知道内存地址不包含垃圾,那么它确实存在。

那么,您的编程问题的解决方案是跟踪有多少列表条目不是垃圾。为此,C 中有两种常用方法:

  1. 跟踪列表的长度,或
  2. 在列表末尾添加一个特殊值

推荐阅读