предупреждение: формат% s ожидает тип char *, но аргумент 2 имеет тип int - PullRequest
2 голосов
/ 06 декабря 2011

Я уже рассматривал другие связанные вопросы, и ни один из них не помог в этом деле.
Я получаю предупреждение, указанное в заголовке моего вопроса, и мой код для main выглядит следующим образом:

int main( int argc, char *argv[] ) {

  char *rows;  
  int i, n;  

  printf("\nEnter the amount of rows in the telephone pad: ");  
  scanf("%d", &n);  

  rows = (char *) malloc( sizeof( char ) * n );  

  printf("\nNow enter the configuration for the pad:\n");  
  for( i = 0; i < n; i++ ) {  
    scanf("%s", &rows[i]);  
    printf("\n\t%s\n", rows[i]);  
  }  

  return 0;    
}

Пользователь должен ввести число (скажем, 4), которое будет отсканировано в n.Пространство выделено для рядов телефонной панели.Затем пользователь вводит количество строк n для конфигурации телефонной панели.Примером может быть:

123
456
789
.0.

Поэтому я не понимаю, почему мое последнее printf сообщение получает эту ошибку.

Примечание: Я также пытался scanf("%s", rows[i]);: все еще получена ошибка.
Примечание 2:Я пытался запустить программу в любом случае.Получил ошибку сегментации.
Примечание 3: у меня #include <stdio.h> и #include <stdlib.h> в верхней части моей .c программы.
Примечание 4: Я gcc запустил программу как таковую: gcc -ansi -pedantic -Wall tele.c.

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

rows[i] не является char* - это не "строка".

(И вы не можете поместить 3 символа (плюс нулевой терминатор) в один символ.)

2 голосов
/ 06 декабря 2011

Как уже отмечали другие, вы выделяете пространство для n символов, но вам действительно нужно пространство для n строк по 4 символа в каждой (3 символа, введенных пользователем, и нулевой терминатор).

Есть несколько способов сделать это. Вы можете сначала выделить n char * переменных для указания на строки, а затем выделить 4 байта для каждой строки:

int main( int argc, char *argv[] )
{
  char **rows;
  int i, n;

  printf("\nEnter the amount of rows in the telephone pad: ");
  scanf("%d", &n);

  rows = malloc( n * sizeof rows[0] );

  printf("\nNow enter the configuration for the pad:\n");
  for( i = 0; i < n; i++ ) {
    rows[i] = malloc(4);
    scanf("%3s", rows[i]);
    printf("\n\t%s\n", rows[i]);
  }

  return 0;
}

Или вы можете выделить n 4-символьные массивы заранее:

int main( int argc, char *argv[] )
{
  char (*rows)[4];
  int i, n;

  printf("\nEnter the amount of rows in the telephone pad: ");
  scanf("%d", &n);

  rows = malloc( n * sizeof rows[0] );

  printf("\nNow enter the configuration for the pad:\n");
  for( i = 0; i < n; i++ ) {
    scanf("%3s", rows[i]);
    printf("\n\t%s\n", rows[i]);
  }

  return 0;
}
1 голос
/ 06 декабря 2011

ваш printf передается в символе, а не в% s

, который вы говорите, получите i-й символ в строке 'rows.

Что еще более важно, вся ваша техникасобирается потерпеть неудачу ....

Я думаю, вам нужен массив строк .... или вы хотите изменить свой scanf на% c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...