我这里有一点问题 memcpy()
当我写这个
char ipA[15], ipB[15];
size_t b = 15;
memcpy(ipA,line+15,b);
Run Code Online (Sandbox Code Playgroud)
它b从line第15个元素开始复制数组中的字节(很好,这就是我想要的)
memcpy(ipB,line+31,b);
Run Code Online (Sandbox Code Playgroud)
这b从第31个元素开始的行复制字节,但它也附加了前一个命令的结果,即ipA.
为什么?ipB大小是15,所以它没有足够的空间来复制其他任何东西.这里发生了什么事?
ipA是192.168.123.123ipB变成了205.123.123.122 192.168.123.123我哪里错了?我实际上并不知道很多关于C中的内存分配.
看起来你并没有在ipA中终止字符串.编译器已将两个变量彼此相邻放在内存中,因此字符串操作假定第一个空终止符在第二个数组之后的某个时间(每当下一个数组0出现在内存中时).
尝试:
char ipA[16], ipB[16];
size_t b = 15;
memcpy(ipA,line+15,b);
ipA[15] = '\0';
memcpy(ipB,line+31,b);
ipB[15] = '\0';
printf("ipA: %s\nipB: %s\n", ipA, ipB)
Run Code Online (Sandbox Code Playgroud)
这应该确认这是否是问题所在.显然你可以使代码比我上面的测试代码更优雅.作为手动终止的替代方法,您可以使用printf("%.*s\n", b, ipA);或类似强制printf来打印正确数量的字符.