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