【发布时间】:2012-05-09 16:23:41
【问题描述】:
我有一个字符串 AAbbCC,我需要复制前两个并将它们添加到数组中,然后复制中间两个并将它们添加到数组中,最后将最后两个添加到数组中。
这就是我的工作:
char color1[2];
char color2[2];
char color3[2];
strncpy(color1, string, 2); // I take the first two characters and put them into color1
// now I truncate the string to remove those AA values:
string = strtok(string, &color1[1]);
// and when using the same code again the result in color2 is bbAA:
strncpy(color2, string, 2);
它通过了那些 bb 和前一个中的 AA .. 即使数组只有两个位置,当我使用 strtol 时,它给了我一些很大的价值,而不是我正在寻找的 187 .. 如何获得摆脱那个?或者如何让它以其他方式工作?任何建议将不胜感激。
【问题讨论】:
-
char * 字符串以空值结尾。如果您想在代码中将 colorX 用作字符串(我假设您在将 0xbb 转换为 187 时会这样做),您需要将它们扩展一个字节并将此字节设置为 0。
-
如果你只想跳过 2 个字符,为什么不干脆做类似
strncpy(color2, string+2, 2); color2[2] = '\0'之类的事情? -
是的,谢谢你们俩.. 我想通了 :) 和@Anthales 感谢您指出我根本不需要 strtok
-
您提到您正在寻找 187,但这在问题的其余部分并不明显。为什么不在较大的字符串上使用
strtoul,而不是先将其切成碎片? -
@MrLister 实际上我正在寻找一种工具,它将十六进制值表示的颜色切割成 3 个不同的值,然后我会将它们转换为十进制值 (RGB),但我已经通过添加一个空格来实现for '\0' 进入我的数组:)
标签: c string char truncate strncpy