2014-12-13 3 views
1

Моя программа скомпилирована с любой ошибкой, но она не работает (ошибка сегментации). Какая ошибка?function modify extern variables

хиджры

extern int k; 
extern int j; 
char funk(char *str[], int i); 

a.c

#include "a.h" 

int k=0; 
int j=0; 
char funk(char *str[], int i) { 
    if (str[k][j] == '\0' && k < i) { 
     k++; 
     j = 0; 
    } 

    return str[k][j++]; 
} 

b.c

#include <stdio.h> 
#include "a.h" 
int main(int argc, char *argv[]) 
{ 
    char c; 
    while (c = funk(argv, argc)) 
     printf("%c", c); 

    return 0; 
} 
+3

Пожалуйста, не говорите мне, что: 'a.h',' a.c' и 'b.c' - ваши имена файлов? Также вы потеряли функцию 'main()' на пути к stackoverflow? – Rizier123

+0
+0

Привет @hrlinc, если какой-либо ответ разрешил ваш вопрос, пожалуйста, подумайте о том, чтобы принять его, нажав галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. – 2501

ответ

1

Вы здесь вне границ. Вызов func() в цикле гарантирует, что вы, в конце концов, зачитаетесь за пределы, когда k==i здесь: str[k][j] == '\0'

Сделайте чек k < i первым.

+0

спасибо, но не работа! когда я удаляю j = 0 в программе funk. но он просто печатает argv [0]. – hrlinc

1

Это потому, что argv[argc] гарантировано null pointer, что вы являетесь разыменованием в течение последней итерации.

От N1570 (C11) 5.1.2.2.1/2запуска программы:

argv[argc] должен быть нулевым указателем.

Как ответ на вопрос @ 2501, самым простым средством для этой проблемы было бы заменить порядок && операндов.