打印数组中的字符

时间:2018-01-02 17:49:46

标签: c arrays printf strtok

char input[100];
char *word;
gets(input);
word=strtok(input, " ");
char str[15];
str[0]=word;
printf("%c", str[0]);

这是我的代码,除了标题。我试图打印出角色,但它没有用。我怎么能修好它?我希望看到我从strtok()得到的角色。

3 个答案:

答案 0 :(得分:2)

首先,不要使用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]);   
   }
}

或者更简单地说,如果你知道这些单词之间有空格,就像你说的那样

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, " ");             
   }
}

使用完毕后释放重复的字符串。

答案 1 :(得分:0)

strtok返回指向char的指针。您需要取消引用word才能将其str[0]分配给str[0]char类型为str[0]=word; 。 改变

str[0] = *word;

{{1}}

答案 2 :(得分:0)

strtok返回引用下一个标记的指针(在本例中为第一个标记),因此如果要访问此标记的第一个字符,则必须使用X_train, X_test。在您的代码中,行y_train, y_test会自动投放到word[0],这意味着 指针地址的第一个字节。

str[0]=word