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

这段代码中的逻辑错误

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

在这里,您使用“/n”而不是“\n”来检查空行。

于 2013-04-25T04:00:19.533 回答
0

在您的代码中的其他问题。

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

正如您想象的那样,这不会为您提供动态二维字符数组。

这是创建动态字符串数组的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

空行与“\n”而不是“/n”进行比较。

于 2013-04-25T03:27:38.083 回答
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 回答