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。スペースは電話パッドの列のためにmallocされています。次に、ユーザーnは電話パッドの構成の行数を入力します。例は次のとおりです。

123
456789.0 。
_

printfそのため、最後のステートメントでこのエラーが発生する理由について混乱しています。

注:私も試しscanf("%s", rows[i]);ました:それでもエラーが発生しました。
注2:とにかくプログラムを実行してみました。セグメンテーション違反が発生しました。
注3:.cプログラムの先頭にあります#include <stdio.h>。 注4:私はそのようにプログラムをgccしました:。#include <stdlib.h>
gcc -ansi -pedantic -Wall tele.c

お手伝いありがとう。

4

3 に答える 3

3

rows[i]ではありませんchar*-それは「文字列」ではありません。

(そして、1文字に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;
}

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

printfは%sではなくcharを渡しています

文字列「rows」のi番目の文字を取得すると言っています。

さらに重要なことに、あなたのテクニック全体がひどく失敗するでしょう…。

文字列の配列が必要だと思います...またはscanfを%cに変更したい

于 2011-12-06T02:03:45.060 に答える