打印数组中的字符

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]);