以下代码有什么区别:
char* str = "this is a string"
从这个:
char* str = strdup("this is a string")
使用场景?
以下代码有什么区别:
char* str = "this is a string"
从这个:
char* str = strdup("this is a string")
使用场景?
在这份声明中
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 指向动态分配的字符数组的第一个字符,该数组包含字符串“这是一个字符串”。您 1)必须在不再需要数组时释放内存,并且 2)您可以更改数组中的字符。
str[0] = 'T'; // valid
free( str ); // valid
可以说,在第一种情况下,字符串的所有者是编译器,而在第二种情况下,字符串的所有者是程序员。:)
在char *str = "this is a string";
变量中指向一个带有字符串内容的只读内存区域。
在char *str = strdup("this is a string");
变量中指向一个 16 字节长的可写内存区域,程序必须在某个时候释放它以防止内存泄漏(或者,如果发生错误,变量为 NULL)。
另请注意,strdup()
标准未描述,某些实现可能无法编译此版本。
宣言
char* str = "this is a string";
声明str
一个指向字符串字面量的指针。它不能被修改。尽管
char* str = strdup("this is a string");
声明str
一个指针,指向由 . 返回的动态分配的内存strdup
。在这种情况下str
可以传递给free
.