我的程序编译时出现任何错误但它不起作用(分段错误)。这是什么错误?
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;
}
答案 0 :(得分:1)
你正在读书。在循环中调用func()可以确保在k==i
处str[k][j] == '\0'
时最终读出界限:k < i
首先检查{{1}}。
答案 1 :(得分:1)
这是因为argv[argc]
保证是空指针,你在最后一次迭代中解除引用。
从N1570(C11)5.1.2.2.1/2
计划启动:
argv[argc]
应为空指针。
正如@ 2501回答的那样,对这个问题最简单的补救办法是替换&&
个操作数的顺序。