1

これまでの私のコードは次のとおりです。

    char *c;
char inputString[200];

//get number of lines
c=fgets(inputString, 200, in_file);
while(c!=NULL){
    numLines++;
    c=fgets(inputString, 200, in_file);
}

rewind(in_file);

//array of instructions
char** instruc = malloc(numLines * 200); 

c = fgets(inputString, 200, in_file);

//fill the array of instructions.   
while (c != NULL){
    //allocate space for the string in the index of the array
    instruc[i] = malloc(200);
    strcpy(instruc[i], inputString);
    if (strcmp(instruc[i], "\n")==0){
        fprintf(stderr, "Blank line.\n");
        exit(-2);
    }
    i++;
    c = fgets(inputString, 200, in_file);
}

何らかの理由で、私の strcmp(instruc[i], "/n") がスクリプトの新しい行をキャッチしていないため、コードが新しい行に遭遇するたびにセグメンテーション違反が発生します。以下は、私が渡すスクリプトの例です。

CONST R1 11

PUSH R1
CONST R2 12 

CONST R1 11 と PUSH R1 の間で、セグメンテーション違反が発生します。行間の空白をチェックする方法を教えてもらえますか? ありがとう!

4

5 に答える 5

1

空(空白)行はあなたのプログラム用ではあり"\n"ません。"/n"

于 2013-04-25T03:17:49.747 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
    char inputString[200];
    size_t i, numLines = 0;
    FILE *in_file = fopen("input.txt","r");

    while(NULL!=fgets(inputString, sizeof(inputString), in_file)){
        if (strcmp(inputString, "\n")==0){
            fprintf(stderr, "Blank line.\n");
            exit(-2);
        }
        ++numLines;
    }

    rewind(in_file);

    char** instruc = malloc(numLines * sizeof(char*)); 

    for(i=0;i<numLines;++i){
        instruc[i] = malloc(sizeof(inputString));
        fgets(instruc[i], sizeof(inputString), in_file);
    }
    fclose(in_file);
    //do something
    //deallocate memory
    return 0;
}
于 2013-04-25T11:02:03.290 に答える
0

コードの他の問題の中でも。

char** instruc = malloc(numLines * 200); 

ご想像のとおり、これは動的な 2-d 文字配列を提供しません。

動的文字列配列を作成するSSCCEは次のとおりです。

#include <stdio.h>
#include <stdlib.h>

#define ROW_SZ 5        //row size is number of strings
#define COL_SZ 200      //column size is number of characters in a string

int main()
{
int i;
char** str = malloc(ROW_SZ * sizeof(char*) );     //str is assigned char**

for ( i = 0; i < ROW_SZ; i++ )
    str[i] = malloc(COL_SZ * sizeof(char) );   //str[i] is assigned char*

// code here to use your dynamic 2-d string


for ( i = 0; i < ROW_SZ; i++ )
    free(str[i]);

free(str);

return 0;
}
于 2013-04-25T03:25:22.400 に答える
0

このコードの論理エラー

if (strcmp(instruc[i], "/n")==0){
        fprintf(stderr, "Blank line.\n");
        exit(-2);
    }

ここでは、空白行のチェックに「\n」の代わりに「/n」を使用しています。

于 2013-04-25T04:00:19.533 に答える