Возникли проблемы с добавлением int в строку, попытался использовать sprintf, но у меня возникли проблемы

Я пытаюсь прочитать файл и напечатать все слова, которые есть в файле, игнорируя все остальные пробелы и символы. У меня он работает с strcpy, но выдает ошибку, и я пытаюсь использовать sprintf, но я действительно не понимаю, как эти функциональные слова. Он печатает случайные целые числа вместо строк.

Редактировать: я совершенно новичок в C, поэтому у меня не очень хорошо работают указатели.

  FILE *file;
  file = fopen("sample_dict.txt", "r");
  int c;
  int wordcount = 0;
  int count = 0;
  const char *a[10];
  char word[100];
  do {
    c = fgetc(file);
    //error statement
    if (feof(file)) {
      break;
    }
    if (isalpha(c) && count == 2) {
      printf("%s\n", word);
      memset(word, 0, sizeof(word));
      count = 1;
      wordcount++;
    }

    if (isalpha(c)) {
      //strcat(word, &c);
      sprintf(word, "%d", c);
      continue;
    }
    count = 2;
    continue;
  } while (1);
  fclose(file);
  return (0);

  return 0;

person Kot    schedule 09.10.2014    source источник
comment
Вы печатаете char как целое число, когда используете %d, вы можете напечатать его вот так: sprintf(word, "%c", c);, но вы сбрасываете слово в каждом символе. лучше используйте счетчик и скопируйте в массив...   -  person SHR    schedule 10.10.2014


Ответы (1)


Используйте %c для спецификатора формата в C, если вам нужен символ. если вы используете %d, он будет работать, но будет отображаться как целое число.
Другое дело, что если вы хотите использовать sprintf для объединения строки с char или int, вы должны включить оба аргумента в список аргументов. спринтф:

изменить это:

sprintf(word, "%d", c);

К этому:

char newString[20];//adjust length as necessary
sprintf(newString, "%s%c",word, c);  

Ваша логика здесь предполагает, что вы хотите добавить символ только в том случае, если это альфа [az, AZ]

  if(isalpha(c))
  {
    //strcat(word, &c);
    sprintf(word, "%d", c);
    continue;
  }  

Измените его на:

  if(isalpha(c))
  {
    //strcat(word, &c);
    char newString[20];//bigger if needed, 20 just for illustration here
    sprintf(newString, "%s%d", word, c);
    continue;
  }    
person ryyker    schedule 09.10.2014
comment
Я изменил его на sprintf(word, %s%c, word, c); и это сработало. Спасибо - person Kot; 10.10.2014
comment
sprintf(word, "%s%d", word, c); это УБ. потому что 1-й аргумент sprintf равен restrict (поведение копирования в области, перекрывающей область, не определено). - person BLUEPIXY; 10.10.2014
comment
@BLUEPIXY - ты прав. Спасибо. Отредактированный пост. - person ryyker; 10.10.2014