【问题标题】:Size of char Array doesn't change(C) [closed]char 数组的大小不变(C)[关闭]
【发布时间】:2021-03-16 11:29:42
【问题描述】:

不知何故,无论数组有多长,我的程序都会输出相同的大小,你知道我做错了什么吗?

char charArray[] = "STRING";
int size = sizeof(charArray) / 2 - 1;
        
printf("%d", size);

输出:3

(我必须创建一个程序来在另一个字符串中找到一个字符串,这就是为什么我在末尾减去 1 以找到我想要查找的单词的长度)

【问题讨论】:

  • 当你在 C 中定义一个数组时,它有一个固定的长度。您的声明将长度隐式设置(并修复)为 7(“STRING\0”为 7 个字符长 - 最后您有一个不可见的 NULL)。
  • 你是什么意思,“不管数组有多长”?你认为是什么导致数组的大小发生变化?你认为数组是什么?
  • 阅读 Modern C 和一些 C 标准,例如 n1570。在您的下一个问题中提供一些minimal reproducible example。阅读 C 编译器的文档GCC
  • 你是如何让数组变长的?
  • 该代码不输出 3。它从 (7 / 2 - 1) 输出 2。

标签: arrays c string printf


【解决方案1】:

如果您只想获取字符串的长度,可以使用字符串库中的strlen 来实现您自己的:

size_t my_strlen(const char *str)
{
    size_t i = 0;
    while (str[i] != '\0')
        i++;
    return (i);
}

使用此函数,my_strlen("STRING") 将返回 6。

【讨论】:

  • 不要建议新手重新实现 stdlib 函数。没有必要重新发明轮子,尤其是当他们可能弄错的时候。
  • 你说得对
  • @underscore_d 初学者应该通过编写这些函数来学习,因为这是最好的练习。
  • 我们必须同意不同意那个。
  • 我不会说我是初学者,直到现在我才需要找到数组的长度......这是我必须使用它的代码:onlinegdb.com/B1Y89eYoP
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多