函数修改外部变量

时间:2014-12-13 16:25:09

标签: c extern

我的程序编译时出现任何错误但它不起作用(分段错误)。这是什么错误?

A.H

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

交流转换器

#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;
}

2 个答案:

答案 0 :(得分:1)

你正在读书。在循环中调用func()可以确保在k==istr[k][j] == '\0'时最终读出界限:k < i

首先检查{{1}}。

答案 1 :(得分:1)

这是因为argv[argc]保证是空指针,你在最后一次迭代中解除引用。

从N1570(C11)5.1.2.2.1/2 计划启动

  

argv[argc]应为空指针。

正如@ 2501回答的那样,对这个问题最简单的补救办法是替换&&个操作数的顺序。