c/c++语言开发共享如何在c中将char数组设置为string

所以我有一个结构调用Process_Info

struct Process_Info { char name[128]; int pid; int parent_pid; int priority; int status; }; 

和一组Process_Info调用信息。 我将信息中的pid设置为一个整数,它可以工作,但是当我尝试将info中的名称设置为“{kernel}”时,就像这样

 info[i].name="{kernel}"; 

它给了我不兼容的分配错误类型。 我在网上搜索似乎我可以这样做,比如https://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/ ,他们做了char label [] =“Single”; 那么我做错了什么?

    简短的回答:AC编译器会将常量字符串烘焙到二进制文件中,因此您需要使用strncpy (如果您不担心安全性,则使用strcpy )将“{kernel}”复制到info[i].name

    更长的答案:每当你写作

     char label[] = "Single"; 

    C编译器将字符串“Single”烘焙到它生成的二进制文件中,并将label作为指向该字符串的指针。 在C语言术语中,“Single”是const char *类型,因此不能以任何方式更改。 但是,您不能将const char *分配给char * ,因为可以修改char *

    换句话说,你不能写

     char label[] = "Single"; label[0] = "T"; 

    因为编译器不允许第二行。 但是,您可以通过编写类似的内容更改info[i].name

     info[i].name[0] = '['; 

    因为info[i].name if char *类型。 要解决这个问题,你应该使用strncpy (我引用上面的手册页)将字符串“{Kernel}”复制到info[i].name

     strncpy(info[i].name, "{Kernel}", 256); info[i].name[255] = ''; 

    这将确保您不会溢出缓冲区。

    我想你可能弄错了。 你分配这个的方式就像一次一个char …

     name[] = {'a','b','c','d'}; 

      以上就是c/c++开发分享如何在c中将char数组设置为string相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522159.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐