Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数修改外部变量_C_Extern - Fatal编程技术网

C 函数修改外部变量

C 函数修改外部变量,c,extern,C,Extern,我的程序编译时有任何错误,但无法运行(分段错误)。错在哪里 a、 h a、 c #包括“a.h” int k=0; int j=0; char funk(char*str[],int i){ 如果(str[k][j]='\0'&&k代码> k>代码>结束等于数组中的代码> i>代码> Hi @ HLLIc,如果有任何答案解决了您的问题,请考虑通过单击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。谢谢,但不管用!当我在funk程序中删除j=0

我的程序编译时有任何错误,但无法运行(分段错误)。错在哪里

a、 h

a、 c

#包括“a.h”
int k=0;
int j=0;
char funk(char*str[],int i){
如果(str[k][j]='\0'&&k
b、 c

#包括
#包括“a.h”
int main(int argc,char*argv[])
{
字符c;
while(c=funk(argv,argc))
printf(“%c”,c);
返回0;
}

您的读数超出了范围。在循环中调用func()可确保当
k==i
此处:
str[k][j]='\0'


首先检查
k

这是因为
argv[argc]
保证为空指针,您在上一次迭代中取消引用

从N1570(C11)
5.1.2.2.1/2
程序启动:

argv[argc]
应为空指针


根据@2501的回答,解决这个问题最简单的方法是替换
和&
操作数的顺序。

请不要告诉我:
a.h
a.c
b.c
是您的文件名吗?在StAccess溢出的方式下,您是否丢失了<代码>(或)代码>函数?<代码> K< i>代码> <代码> k>代码>结束等于数组中的代码> i>代码> Hi @ HLLIc,如果有任何答案解决了您的问题,请考虑通过单击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。谢谢,但不管用!当我在funk程序中删除j=0时,该程序工作。但它只打印argv[0]。
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++];
}
#include <stdio.h>
#include "a.h"
int main(int argc, char *argv[])
{
    char c;
    while (c = funk(argv, argc))
        printf("%c", c);

    return 0;
}