C中的char*str ="this is a string"来自char*str = strdup("this is a string")之间的差异是什么?

林开盛*_*林开盛 2 c

以下代码之间的区别是什么:

char* str = "this is a string"

从这一个:

char* str = strdup("this is a string")

使用场景?

Vla*_*cow 8

在这个宣言中

char *str="this is a string"; 
Run Code Online (Sandbox Code Playgroud)

指针str指向字符串文字的第一个字符"this is a string".字符串文字1)具有静态存储持续时间,2)可能不会更改.

从而

str[0] = 'T'; // undefined behaviour
free( str ); // undefined behaviour
Run Code Online (Sandbox Code Playgroud)

在这个宣言中

char *str = strdup("this is a string");
Run Code Online (Sandbox Code Playgroud)

指针str指向包含字符串"this is a string"的动态分配字符数组的第一个字符.您1)在不再需要阵列时必须释放内存2)您可以更改阵列中的字符.

str[0] = 'T'; // valid
free( str ); // valid
Run Code Online (Sandbox Code Playgroud)

可以说在第一种情况下,字符串的所有者是编译器,在第二种情况下,字符串的所有者是程序员.:)