C数组不能正常工作

Sof*_*gre 2 c

所以我在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);
}
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 8

这是发生的事情:

  1. main(),你正在申请sizeof()数组,所以你得到数组的大小.

  2. main()呼叫method(),阵列衰减成一个指针(因为method()需要一个指针).

  3. method(),您正在应用sizeof()指针,因此您获得指针的大小.

要修复,通过实际分配的大小arrmethod()作为一个额外的参数,并使用该参数为您所允许多少东西写入到一个极限arr.

作为旁注,以下内容并不符合您的预期:

arr = "hello "; //executes just fine
Run Code Online (Sandbox Code Playgroud)

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