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

标签 c unix

哟!

我正在尝试将一些字符从 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/

相关文章:

c - C 中的链表插入

c - 在 Fedora 上的 make menuconfig 中编译 Linux 时出错

c - 遍历链表获取值有什么意义,直接就可以得到吧?

c - 如何将 "-lm"(LDFLAGS) 正确添加到此 Makefile 中?

c - for循环条件总是为真

shell - 在 shell 脚本中禁止输出到屏幕

c++ - 人们为什么不使用c++来制作操作系统

linux - 显示以 1 或 0 结尾的所有行,并且 1 位于该行倒数第三个字符

linux - SSH 使用 python 脚本

c - C 中的静态和动态内存地址