所以我在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)的行也不起作用.有解决方法吗?
这是发生的事情:
在main(),你正在申请sizeof()数组,所以你得到数组的大小.
当main()呼叫method(),阵列衰减成一个指针(因为method()需要一个指针).
在method(),您正在应用sizeof()指针,因此您获得指针的大小.
要修复,通过实际分配的大小arr到method()作为一个额外的参数,并使用该参数为您所允许多少东西写入到一个极限arr.
作为旁注,以下内容并不符合您的预期:
arr = "hello "; //executes just fine
Run Code Online (Sandbox Code Playgroud)
这不会修改底层数组; 它只是重新指向arr字符串文字.您应该使用strncpy()而不是分配.