簡體   English   中英

警告:格式%s期望為char *類型,但參數2為int類型

[英]warning: format %s expects type char * but argument 2 has type int

我已經看過其他相關問題,但沒有一個問題有幫助。
我在問題標題中列出了警告,而我的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.0。

因此,我對為什么我的上一個printf語句收到此錯誤感到困惑。

注意:我也嘗試過scanf("%s", rows[i]); :仍然出現錯誤。
注意2:我還是嘗試運行該程序。 出現分段錯誤。
注意3:我的.c程序頂部有#include <stdio.h>#include <stdlib.h>
注意4:我已經將該程序gcc -ansi -pedantic -Wall tele.cgcc -ansi -pedantic -Wall tele.c

感謝您的幫助。

rows[i]不是char* -不是“字符串”。

(而且一個字符不能容納3個字符(加上空終止符)。)

正如其他人指出的那樣,您正在為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;
}

您的printf傳遞的是字符而不是%s

您是說在字符串“ rows”中獲取第i個字符。

更重要的是,您的整個技術將嚴重失敗。

我認為您需要一個字符串數組....或者您要將scanf更改為%c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM