【发布时间】:2015-01-31 13:47:58
【问题描述】:
请帮助我了解使用 char line[80]="1:2" 之类的初始化字符数组(不起作用!!)和使用 char line[80] 后跟 strcpy(line,"1:2") 的区别。
根据我在第一种情况下的理解,我有一个字符数组,它已经分配了内存,我正在向它复制一个字符串文字。在第二种情况下也是如此。但显然我错了。那么我的理解有什么问题。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void tokenize(char* line)
{
char* cmd = strtok(line,":");
while (cmd != NULL)
{
printf ("%s\n",cmd);
cmd = strtok(NULL, ":");
}
}
int main(){
char line[80]; //char line[80]="1:2" won't work
/*
char *line;
line = malloc(80*sizeof(char));
strcpy(line,"1:2");
*/
strcpy(line,"1:2");
tokenize(line);
return 0;
}
【问题讨论】:
-
因为它是
char数组,所以初始化时的值应该是{'1',':','2'};。在一个索引处,只会添加一个字符值。 -
char line[80]="1:2"是字符串文字,你不能在tokenize函数中修改它(使用strtok)所以它不起作用。 -
char line[80]="1:2"-->char line[80]="1:2";
标签: c pointers token c-strings