2

我已经查看了其他相关问题,但没有一个对这个案子有帮助。
我收到问题标题中列出的警告,我的代码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:我的 .c 程序的顶部有#include <stdio.h>和。 注 4:我已经 gcc'ed 程序是这样的:.#include <stdlib.h>
gcc -ansi -pedantic -Wall tele.c

感谢您的帮助。

4

3 回答 3

3

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

(而且你不能在一个字符中放置 3 个字符(加上空终止符)。)

于 2011-12-06T02:02:49.017 回答
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;
}

或者,您可以预先分配n4 个字符的数组:

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;
}
于 2011-12-06T02:44:02.857 回答
1

您的 printf 传入的是 char,而不是 %s

您是说在字符串“行”中获取第 i 个字符。

更重要的是,你的整个技术将严重失败......

我认为您想要一个字符串数组....或者您想将 scanf 更改为 %c

于 2011-12-06T02:03:45.060 回答