当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将几个字符从char[]复制到C中的char*?》经验,为你挑选了2个好方法。

呦!

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

任何回应都会有所帮助!



1> Roddy..:

我猜你的意思是......

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

问题是你没有分配任何内存来保存你正在复制的字符."filename"是一个指针,但它不指向任何东西.

要么只是声明

char filename[512];

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

在代码中使用strncpy()有一些问题.

缓冲区+ 5点到字符串中的第六个字符("T"),而你说你想要反斜杠.

最后一个参数是要复制的最大字节数,因此应该是msglen-13.

strncpy()不会为复制的字符串终止null,因此您需要手动执行此操作.

另外,从可读性的角度来看,我更喜欢

strncpy(filename,&buffer [4],msgLen-(9 + 4));

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

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



2> Mehrdad Afsh..:

首先,您应该为其分配缓冲区filename.下一个问题是你的偏移.

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

msgLen = recv(connecting_socket, buffer, 512, 0);
strncpy(filename, buffer+4, msgLen-4-9); 
//the first parameter should be buffer+4, not 5. Indexes are zero based.
//the second parameter is count, not the end pointer. You should subtract
//the first 4 chars too.

此外,您应该确保在字符串末尾添加null,而strncpy不是这样做.

filename[msgLen-4-9] = 0;

你也可以使用memcpy而不是strncpy你想要只复制一些字节:

memcpy(filename, buffer+4, msgLen-4-9);
fileName[msgLen-4-9] = 0;

在任何一种情况下,请确保验证您的输入.您可能会收到套接字的无效输入.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有