【发布时间】:2020-03-01 12:33:40
【问题描述】:
假设
char nickAndPwd[] = "John 1234";
我想得到nick ="John" 和password = "1234"。我该怎么做?
这是我做的,但它似乎不能正常工作
int main() {
char nicknameAndPwd[] = "Alessandro 12345678901";
char nick[10];
char pwd[11];
int nickLength = 10;
int pwdLength = 11;
memcpy( nick, &nicknameAndPwd[0], nickLength);
nick[nickLength] = '\0';
memcpy(pwd, &nicknameAndPwd[nickLength+1], pwdLength);
pwd[pwdLength] = '\0';
printf("%s\n", nick);
printf("%s\n", pwd);
return 0;
}
我该如何解决?
【问题讨论】:
-
nick[nickLength] = '\0'会写出越界! 数组的大小不是顶部索引,而是元素的数量。因此,当您将nick定义为10元素的数组时,这意味着有效索引是0到9(包括)。 -
按照上述说明修复错误后,您可以执行 memset(nick, 0, sizeof(nick)) 将其清除。或者,如果你不想使用 memcpy,你可以使用“c”函数 strtok(),它在 string.h
-
甚至不需要复制,只需用
strtok或等价物分配一个指针。