2015-01-28 2 views
-1

Я создал string (array of characters), который я пытаюсь передать функции в моей основной части, которая будет изменена в рамках подфункции. В моей основной, я объявляю/инициализировать массив как таковой:Передача массива по ссылке в c

char line[300]; 

Мой заголовок моей подфункции является

int encrypt_function(char *line[]){ 
    } 

, в которой я намерен изменить буквы исходной строки из основной, так что, когда Я выхожу из своей функции шифрования и пытаюсь напечатать свою строку в моей основной функции, строка line отличается от строки, когда я передал ее encrypt_function.

Мой призыв к encrypt_function является:

encrypt_function(*line); 

Я получаю сегментный fault--, что я делаю неправильно?

ответ

0

Ваш int encrypt_function(char *line[]){ } равен int encrypt_function(char **line){ }. Просто используйте int encrypt_function(char *line){ } или int encrypt_function(char line[]){ } для вашей проблемы.

Ошибка сегментации связана с защитой памяти.

0

При вызове encrypt_function вам необходимо передать строку &, а не * линию.

НО:

Если вы хотите изменить contnet буфера, вам не нужен дополнительный указатель.

int encrypt_function(char *line); 

предпочтительно. чтобы безопасно манипулировать им, вы должны также передать размер:

int encrypt_function(char *line, int size); 
2

Ошибка сегментации из-за нарушения доступа к памяти. Ваша функция должна быть в формате

int encrypt_function(char *line); 

и вы должны вызвать функцию как

encrypt_function(&line[0]); 

или

encrypt_function(line); 
+0

Почему ненужная ссылка/индекс? просто назовите его как 'encrypt_function (строка);' – ApproachingDarknessFish

+0

Это тоже ОК ....... :) – jjb

0

Когда вы пытаетесь использовать функцию, используя передачу по ссылке, мы должны использовать указатель в качестве ссылки. Здесь, в строке [300], переменная строка является указателем на массив из 300 элементов. Следовательно, вы можете напрямую передать строку функции вместо строки *. encrypt_function (линия). Это происходит потому, что сама строка является указателем.

И в объявлении объявить функцию encrypt_function (char * line) или encrypt_function (char line []).

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

  • Нет связанных вопросов^_^