有没有人看一下这段代码哪里有问题,输出结果是空

有没有人看一下这段代码哪里有问题,输出结果是空

img

img


这是求字符串长度的,它报错的意思应该是说我越界访问了,可是我感觉没错啊。有没有会的

if(*p2 == '\n') 这里判断条件错误,造成上面的for()循环越界,应改为:if(*p2 == '\0') ,字符串的结束标志是 '\0'

char arr[]="abc";
这里指向了常量,常量不能修改

【以下回答由 GPT 生成】

问题的原因是数组 str 的长度为 10,但实际上在没有赋值之前,数组中的元素是随机值,而不是空字符 '\0'。在调用 strlen 函数时,它会从数组中的第一个元素开始计算字符串的长度,直到遇到第一个空字符 '\0'。由于数组 str 在没有赋值之前并没有空字符,所以 strlen 函数会一直向后访问,直到达到数组的边界,导致越界访问错误。

解决这个问题的方法是在使用 strlen 函数之前,确保数组 str 中的字符串以 '\0' 结尾。有以下几种方式可以实现:

  1. 在声明数组 str 时,直接赋值一个空字符串 "",这样数组 str 中的第一个元素就是空字符 '\0'。代码如下:

    c char str[10] = "";

  2. 在使用 strcpy 函数将字符串赋值给数组 str 之后,在数组 str 的结尾手动添加一个空字符 '\0'。代码如下:

    c strcpy(str, "Hello"); str[strlen(str)] = '\0'; // 手动添加空字符

无论选择哪种方式,都能够确保数组 str 中的字符串以空字符 '\0' 结尾,这样在调用 strlen 函数时就不会出现越界访问错误了。

另外,为了确保输入的字符串不超过数组 str 的长度,还可以使用 fgets 函数来接收用户的输入,这样可以限制输入的字符串长度。代码如下:

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

int main() {
    char str[10];
    int length;

    printf("请输入一个字符串:");
    fgets(str, sizeof(str), stdin);  // 使用fgets函数接收输入

    str[strlen(str) - 1] = '\0';  // 去掉输入字符串的换行符

    length = strlen(str);
    printf("字符串长度:%d\n", length);

    return 0;
}

通过上述修改,代码应该就能够正确计算字符串的长度并输出了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^