[英]warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘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.c
: gcc -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.