C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C中的字符串指针可以直接分配字符串文字吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下程序运行正常,我很惊讶为什么:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void xyz(char **value)
{
        // *value = strdup("abc");
        *value = "abc"; // <-- ??????????
}

int main(void)
{
        char *s1;

        xyz(&s1);

        printf("s1 : %s \n",s1);
}

输出

s1 : abc

我的理解是我必须使用strdup()函数为C中的字符串分配内存,而我没有分配内存.但是在这种情况下,只需使用“”分配字符串值,程序似乎工作正常,任何人都可以解释一下吗?

解决方法

以太字符串中不存在字符串文字.它们驻留在程序存储器中并具有地址.

因此,您可以将该地址分配给指针.程序的行为定义得很好,只要你不尝试通过指针修改文字,就不会发生任何不好的事情.

因此,最好通过const正确使编译器为您工作.希望尽可能将指针类型标记为const,并且编译器将反对修改尝试.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void xyz(char const **value)
{
        *value = "abc";
}

int main(void)
{
        char const *s1;

        xyz(&s1);

        printf("s1 : %s \n",s1);
        s1[0] = 'a'; << Error on this line
}

大佬总结

以上是大佬教程为你收集整理的C中的字符串指针可以直接分配字符串文字吗?全部内容,希望文章能够帮你解决C中的字符串指针可以直接分配字符串文字吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:字符串