2016-12-04 7 views
-2

После объявления строки я получаю ошибку сегментации. Я не знаю, как решить эту ошибку - можете ли вы объяснить?Ошибка сегментации объявления строки

код версии 1 (с использованием typedef char *string; из cs50.h):

int main (int argc, string argv[]) 
{ 
    string key = argv[1]; 
    checkKey(key, argc); 
} 

int checkKey(string text, int n) 
{ 
    //check if text is alphabetical and if argc has the desired amount of command-line elements 
} 

код версии 2:

#include <stdio.h> 
#include <ctype.h> 
#include <cs50.h> 

int main (int argc, char* argv[]) 
{ 
    printf("%d elements in argc and %s in argv[1]\n", argc, argv[1]); 
    char* key = argv[1]; 
} 
+1

где «строка» объявлена? это C++? или typedef? и когда вы вызываете свой главный, вы передаете параметры? –

+0

Вы задали 'string' где-то еще? Как вы называете свою программу? Если параметр отсутствует, argv [1] недействителен. – Gerhardh

+2

Проверьте 'argc' перед доступом к любому' argv'. Строка –

ответ

0

Если запустить программу без аргументов командной строки, она принимает значение 1 для argc и массив argv размера 2 с названием программы в argv[0] и NULL в argv[1].

Если ваша функция charkKey() разыскивает указатель, который он получает в качестве своего первого аргумента, вы вызываете неопределенное поведение, которое может привести к ошибке сегментации.