2014-02-08 1 views
0

в командной строке пользователь должен ввести:C массив Printf и получить open_stackdumpfile ошибка

cmatch -i -n привет test1.in test2.in

"привет" является строка, программа будет искать соответствующие строки во входных файлах.

Теперь я застрял на Printf эта строка .. Я новичок в C и не знаю, как массив строки работает ..

int main(int argc, char **argv){ 
     options opts; 
     program_name = basename (argv[0]); 
     scan_options (argc, argv, &opts); 



     int arrLength=argc-optind; 
     char *strings[arrLength]; 
     char *fileNames[arrLength-1]; 
     const int fileNamesLength=arrLength-1; 

     int argi; int i=0; 
     for (argi = optind; argi < argc; ++argi) { 
      printf ("operand[%d] = \"%s\"\n", argi, argv[argi]); //printing operands 
      strings[i]=argv[argi]; //assigning strings 
      i++; 
     } 

     char *stringToMatch=strings[0]; 
     printf("String to match=%s\n",stringToMatch); 

     int f; 
    for(f=0; f<fileNamesLength; f++){ 
     fileNames[f]=strings[f+1]; 
     printf(fileNames[f]); 
    } 



     printf("GET THROUGH"); 

теперь выход:

операнд [3] = "Привет"

операнда [4] = "test1.in"

операнд [5] = "test2.in"

Строка, чтобы соответствовать = "привет"

0 [main] cmatch 6092 open_stackdumpfile: Dumping stack trace to cmatch.exe.stackdump 

так, что случилось с * stringToMatch?

+0

Что такое 'optind'? Я не вижу, чтобы он определялся где-то – vane

+0

Это положение первого операнда после последнего -описания. Это предоставлено моим учителем. –

+0

Какой компилятор вы используете? – vane

ответ

0

Чтобы напечатать «строка» в C (массив символов) Вы можете сделать следующее:

printf("%s\n", filenames[f]); 

Кроме того, чтобы сравнить две строки в Си вам нужно сделать следующее:

#include <string.h> 

, а затем использовать функцию STRCMP следующим образом, чтобы проверить, если две строки равны:

if(strcmp(name1, name2)==0) 

Кроме того, я бы recomme и избегая таких строк:

fileNames[f]=strings[f+1]; 

вы можете получить доступ к памяти за пределами своей сферы действия. Вместо этого назначьте строку, которую вы ищете для переменной, и используйте ее. Таким образом, сравнительная часть будет выглядеть примерно так:

if(strcmp(constname, strings[f])==0) 

Надеюсь, это поможет!

Смежные вопросы