gpt4 book ai didi

C 数组无法正常工作

转载 作者:行者123 更新时间:2023-12-04 12:00:27 28 4
gpt4 key购买 nike

所以我的 main 方法中有一个 C 字符串(字符数组),当我将它作为参数传递给另一个方法时,它的大小会发生变化。

void method(char* arr){
printf( "%u\n", sizeof(arr) ); //returns 4, in my program.
arr = "hello "; //executes just fine
char arr2[9] = "people";
strcat(arr, arr2); // (1) here is where it crashes down
int i = 0; while(i < sizeof(arr2)){ arr[i+6] = arr2[i]; i++;} // (2) this causes it to crashdown too
}

int main(){
char array[33];
printf("%u\n", sizeof(array) ); //returns 33, in my program.
method(array);
}

为什么会发生这种情况?我该如何解决?这是否意味着我不能向 C 字符串添加更多值?我怀疑这可能是我的程序不断崩溃的原因(每当我尝试添加 n 时)。标有 (1) 和 (2) 的行都不起作用。有解决方法吗?

最佳答案

这是发生了什么:

  1. main() 中,您将 sizeof() 应用于数组,因此您可以获得数组的大小。

  2. main()调用method()时,数组decays变成一个指针(因为 method() 接受一个指针)。

  3. method() 中,您将 sizeof() 应用于指针,因此您可以获得指针的大小。

    <

要解决这个问题,请将 arr 的实际分配大小作为附加参数传递给 method(),并使用该参数作为限制您要处理的东西的数量允许写入 arr

作为旁注,以下内容未达到您的预期:

arr = "hello "; //executes just fine

这不会修改底层数组;它只是将 arr 重新指向字符串文字。您应该使用 strncpy() 而不是赋值。

关于C 数组无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100143/

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