char * str =&#34之间的差异是什么;这是一个字符串"来自char * str = strdup("这是一个字符串")在C中

时间:2015-06-06 09:07:14

标签: c

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

char* str = "this is a string"

从这一个:

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

使用场景?

3 个答案:

答案 0 :(得分:8)

在此声明中

char *str="this is a string"; 

指针str指向字符串文字的第一个字符“这是一个字符串”。 字符串文字1)具有静态存储持续时间,2)可能不会更改。

因此

str[0] = 'T'; // undefined behaviour
free( str ); // undefined behaviour

在此声明中

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

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

str[0] = 'T'; // valid
free( str ); // valid

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

答案 1 :(得分:3)

char *str = "this is a string";中,变量指向具有字符串内容的只读存储区。

char *str = strdup("this is a string");中,变量指向一个16字节长的可写内存区域,程序必须在某个时间释放以防止内存泄漏(或者,如果出错,则变量为NULL)。 另请注意,标准未描述strdup(),某些实现可能无法编译此版本。

答案 2 :(得分:2)

声明

char* str = "this is a string";  

声明str指向字符串文字的指针。它无法修改。而

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

声明str一个指向strdup返回的动态分配内存的指针。在这种情况下,str可以传递给free