gpt4 book ai didi

c - 如何将几个字符从 char[] 复制到 C 中的 char*?

转载 作者:太空狗 更新时间:2023-10-29 15:44:56 25 4
gpt4 key购买 nike

哟!

我正在尝试将一些字符从 char[] 复制到 char*。我只想要从索引 6 到(消息长度 - 9)的字符。

也许代码示例会更多地解释我的问题:

char buffer[512] = "GET /testfile.htm HTTP/1.0";
char* filename; // I want *filename to hold only "/testfile.htm"

msgLen = recv(connecting_socket, buffer, 512, 0);
strncpy(filename, buffer+5, msgLen-9);

任何回复都会有很大帮助!

最佳答案

我假设你的意思是......

strncpy(filename, buffer+5, msgLen-9);

问题是您没有分配任何内存来保存您正在复制的字符。 “文件名”是一个指针,但它不指向任何东西。

要么直接声明

char filename[512];

或者为新名称分配一些内存(并且不要忘记 free() 它...)

在您的代码中使用 strncpy() 存在一些问题。

  • buffer+5 指向字符串中的第六个字符(“T”),而你说你想要反斜杠。
  • 最后一个参数是要复制的最大字节数,因此应该是 msglen-13。
  • strncpy() 不会以 null 终止复制的字符串,因此您需要手动执行此操作。
  • 此外,从可读性的角度来看,我更喜欢

    strncpy(文件名, &buffer[4], msgLen-(9 + 4));

&buffer[5]是数组中第五个位置的字符地址。不过,这是个人问题。

此外,值得指出的是,“recv”的结果可能是一个字节或 512 个字节。它不会只读一行。你真的应该循环调用 recv 直到你有一个完整的行可以使用。

关于c - 如何将几个字符从 char[] 复制到 C 中的 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com