C 函数修改外部变量
我的程序编译时有任何错误,但无法运行(分段错误)。错在哪里 a、 h a、 cC 函数修改外部变量,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”
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;
}