【发布时间】:2013-12-09 20:31:28
【问题描述】:
我正在尝试从 f 构建一个字符串,在空格处拆分并将其读入结构。 f 是我正在迭代的 char 数组。
然后我将 tmp 中的内容复制到 ra1.callsign 中,并基本上清空 tmp char 数组。
我想要做的是让 tmp 变量再次从索引 0 开始构建,这样当我第二次尝试 strcpy 时,tmp 中的所有字符都从索引 0 开始。 我现在拥有它的方式,当它尝试该行时: strcpy(ra1.location, tmp) 它不会复制任何内容,我认为这是因为那时 tmp 中的第一个字符直到某个时间才出现大批。
char c;
char tmp[1000];
for (i = 0; i < len; ++i) {
c = f[i];
if (c != ' ') {
tmp[i] = c; //build string to be added
}
//add string to data structure
if (c == ' ') {
if (addTo == CALLSIGN) {
strncpy(ra1.callsign, tmp, strlen(tmp));
memset(tmp, '\0', strlen(tmp));
}
if (addTo == LOCATION) {
strcpy(ra1.location, tmp);
}
++addTo;
}
}
希望这足够清楚,谢谢。
【问题讨论】:
-
不,还不够清楚。
-
这一行之后:memset(tmp, '\0', strlen(tmp));在我清空字符串的地方,循环继续再次构建字符串,最好是我想要一个函数,将数组中的所有字符推回索引 0 就在这一行之前:strcpy(ra1.location, tmp);
-
memmove() 会按照你的要求做,假设我有一个正确的祈祷。它可用于将子字符串的位置移动到另一个位置,覆盖已经存在的字符。它对源内存没有任何作用,除非有重叠,它可以正确处理。源总是覆盖目标。