gpt4 book ai didi

c - 在 C 中使用不同的数值为相同的操作获取不同的长度

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:35 25 4
gpt4 key购买 nike

我有 2 个 for 循环,它们用字母表中的字母填充数组。我有一个 lowercase 数组集和一个 uppercase 数组集。问题是当我用字母初始化数组时,返回的长度不同。

char uppercase[26];
char lowercase[26];
int indexUpper = 0;
int indexLower = 0;


// Get uppercase array:
for(int a = 65; a <= 90; a++){
uppercase[indexUpper] = a;
indexUpper++;
}

// Get lowercase array:
for(int b = 97; b <= 122; b++){
lowercase[indexLower] = b;
indexLower++;
}

printf("UPPERCASE = %lu\n", strlen(uppercase));
printf("LOWERCASE = %lu\n", strlen(lowercase));

$=> UPPERCASE = 26
$=> LOWERCASE = 27

如果这不是一个明智的选择,我深表歉意。我真的在努力学习和理解 C 语言及其规则。感谢所有贡献者。

最佳答案

strlen() 读取字符数组,直到找到 NUL 字节('\0',数值为零)。您的数组不包含任何内容,因为您还没有在那里分配一个。

这意味着 strlen 将继续读取数组末尾,这是非法的,并且所产生的行为未定义。获得 27 相当温和,您可能会获得任意数字,否则您的程序可能会崩溃。

如果要使用strlen(),就应该在字符串的末尾显式分配一个NUL字节,当然还要为其分配空间。

也许是这样的:

#include <stdio.h>
#include <string.h>

int main(void)
{
char upper[27];
int i;
for (i = 0 ; i < 26; i++) {
/* This only works in a character set where the letters
are contiguous */
upper[i] = 'A' + i;
}
/* i == 26 now */
upper[i] = '\0';
printf("len: %u\n", (unsigned) strlen(upper));
return 0;
}

(尽管在这里使用 strlen 似乎毫无意义,因为您已经知道这些数组中的项数。)

关于c - 在 C 中使用不同的数值为相同的操作获取不同的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com