在我的作业中,我被要求编写一个程序,其中一部分是制作一个2d数组并为其添加10个名称。
现在他们没有指定每个名称的大小,现在我的问题是如何在不指定每个名称大小的情况下制作二维数组?
char arr[10][?] = {0};
答案 0 :(得分:1)
如果您还不了解指针,那么最简单的方法是Weather Vane建议确定名称的最大长度,并将其用于二维数组中的每个子数组。
您不需要“删除那些多余的空(或0)'slots'”,因为当您在c中编写字符串时,或者在将scanf或printf与字符串一起使用时,这些字符串均以空值结尾。这意味着当您将名称放入子数组时,该名称可能已经有一个空终止符(值为0)以表示字符串的结尾。当使用处理以null终止的字符串的函数时,将忽略该null终止之后的每个值。
例如。
char name[] = "Bob";
实际上等同于执行以下任一操作:
char name[] = { 'B', 'o', 'b', '\0'}; //'\0' is a null termination
char name[] = {0x42, 0x6F, 0x62, 0x0}; // ascii hex codes, '\0' translates to 0x0
(如果字符串以null终止并且您使用的函数知道该值,那么name []有多大都无关紧要)。 如果由于某种原因输入空终止符,则可以手动插入该终止符。