I have the following code:
#include <stdio.h>
#include <string.h>
int main (void) {
char str[] = "John|Doe|Melbourne|6270|AU";
char fname[32], lname[32], city[32], zip[32], country[32];
char *oldstr = str;
strcpy(fname, strtok(str, "|"));
strcpy(lname, strtok(NULL, "|"));
strcpy(city, strtok(NULL, "|"));
strcpy(zip, strtok(NULL, "|"));
strcpy(country, strtok(NULL, "|"));
printf("Firstname: %s\n", fname);
printf("Lastname: %s\n", lname);
printf("City: %s\n", city);
printf("Zip: %s\n", zip);
printf("Country: %s\n", country);
printf("STR: %s\n", str);
printf("OLDSTR: %s\n", oldstr);
return 0;
}
执行输出:
$ ./str
Firstname: John
Lastname: Doe
City: Melbourne
Zip: 6270
Country: AU
STR: John
OLDSTR: John
为什么我无法在str
或oldstr
中保留旧数据?我做错了什么,该如何不改变数据或保留它呢?
strtok()
如何工作的代码(它会修改同一地址空间中的字符串),我认为你应该看一下: - Grijesh Chauhanstrtok
之前,要么复制str
的副本,要么不使用strtok
,而是使用一对指针来括起每个标记并复制它,或者使用strcspn
和strspn
的组合来完成相同的操作。使用其他任何方法,您都可以对字符串字面量进行标记化,因为原始字符串不会被修改,但是strtok
通过将分隔符替换为空字符来修改原始字符串。 - David C. Rankin