打印数组中的字符
Print character which is in an array
char input[100];
char *word;
gets(input);
word=strtok(input, " ");
char str[15];
str[0]=word;
printf("%c", str[0]);
这是我的代码,除了 headers。我试图打印出这个角色,但没有成功。我该如何解决...?我希望看到从 strtok() 获得的字符。
所以首先不要使用gets()
。
那么你这样做 str[0]=word;
这是错误的。有两种方法可以摆脱它。使用指针数组并复制字符串或复制 str
.
中的单词
char input[100];
char *word;
char str[15];
if(fgets(input,100,stdin)){
word=strtok(input, " ");
if( word && strlen(word)<15){
strcpy(str,word);
printf("First word: %s\n", str);
}
}
否则
char input[100];
char *word;
char* str[5];
if(fgets(input,100,stdin)){
word=strtok(input, " ");
if( word ){
str[0]=strdup(word);
printf("First word %s\n", str[0]);
}
}
或者更简单,如果你知道你所说的那些词之间有 space
char input[100];
char str[15];
if(fgets(input,100,stdin)){
if( sscanf(input,"%14s",str) == 1){
printf("First word %s\n",str);
}
}
要存储您需要稍微扩展代码的所有单词 - 我将向您展示带有 strdup
的一个,另一个可以类似地完成。
char input[100];
char *word;
char* str[5];
size_t cnt = 0;
if(fgets(input,100,stdin)){
word=strtok(input, " ");
while( word != NULL ){
str[cnt]=strdup(word);
printf("%zu word %s\n",cnt, str[cnt]);
cnt++;
word=strtok(NULL, " ");
}
}
使用完后释放重复的字符串。
strtok
returns 指向 char
的指针。您需要在将 word
分配给 str[0]
之前取消引用,因为 str[0]
的类型为 char
.
更改
str[0]=word;
到
str[0] = *word;
strtok returns 指向下一个标记的指针(在这种情况下是第一个标记),所以如果你想访问这个标记的第一个字符,你必须使用 word[0]
.在您的代码中,行 str[0]=word
自动转换为 str[0]=(char)word
,这意味着
指针地址的第一个字节。
char input[100];
char *word;
gets(input);
word=strtok(input, " ");
char str[15];
str[0]=word[0];
printf("%c", str[0]);
char input[100];
char *word;
gets(input);
word=strtok(input, " ");
char str[15];
str[0]=word;
printf("%c", str[0]);
这是我的代码,除了 headers。我试图打印出这个角色,但没有成功。我该如何解决...?我希望看到从 strtok() 获得的字符。
所以首先不要使用gets()
。
那么你这样做 str[0]=word;
这是错误的。有两种方法可以摆脱它。使用指针数组并复制字符串或复制 str
.
char input[100];
char *word;
char str[15];
if(fgets(input,100,stdin)){
word=strtok(input, " ");
if( word && strlen(word)<15){
strcpy(str,word);
printf("First word: %s\n", str);
}
}
否则
char input[100];
char *word;
char* str[5];
if(fgets(input,100,stdin)){
word=strtok(input, " ");
if( word ){
str[0]=strdup(word);
printf("First word %s\n", str[0]);
}
}
或者更简单,如果你知道你所说的那些词之间有 space
char input[100];
char str[15];
if(fgets(input,100,stdin)){
if( sscanf(input,"%14s",str) == 1){
printf("First word %s\n",str);
}
}
要存储您需要稍微扩展代码的所有单词 - 我将向您展示带有 strdup
的一个,另一个可以类似地完成。
char input[100];
char *word;
char* str[5];
size_t cnt = 0;
if(fgets(input,100,stdin)){
word=strtok(input, " ");
while( word != NULL ){
str[cnt]=strdup(word);
printf("%zu word %s\n",cnt, str[cnt]);
cnt++;
word=strtok(NULL, " ");
}
}
使用完后释放重复的字符串。
strtok
returns 指向 char
的指针。您需要在将 word
分配给 str[0]
之前取消引用,因为 str[0]
的类型为 char
.
更改
str[0]=word;
到
str[0] = *word;
strtok returns 指向下一个标记的指针(在这种情况下是第一个标记),所以如果你想访问这个标记的第一个字符,你必须使用 word[0]
.在您的代码中,行 str[0]=word
自动转换为 str[0]=(char)word
,这意味着
指针地址的第一个字节。
char input[100];
char *word;
gets(input);
word=strtok(input, " ");
char str[15];
str[0]=word[0];
printf("%c", str[0]);