我已经查看了其他相关问题,但没有一个能帮助这个案例
我收到了问题标题中列出的警告,我的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
。
感谢您的帮助。
答案 0 :(得分:3)
rows[i]
不是char*
- 它不是“字符串”。
(并且你不能在一个字符中放入3个字符(加上空终止符)。)
答案 1 :(得分:2)
正如其他人所指出的那样,你正在为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;
}
答案 2 :(得分:1)
你的printf传入的是char,而不是%s
你说要在字符串'rows'中获取第i个字符。
更重要的是,你的整个技术将会严重失败......
我想你想要一个字符串数组....或者你想将你的scanf改为%c