我遇到了一些似乎侵入了内存预留空间的字符串数组问题。该代码太大,张贴在这里,所以我会后下面的重要组成部分:使用字符串数组的分段错误
int main (){
int i = 0, j = 0, k = 0, count = 0, numLinhas = 0, l = 0;
char string[100][100];
char line [17];
char str[4];
char str1[5];
char str2[4];
char str3[4];
FILE *p;
p = fopen("text.txt", "r");
while(fgets(line, sizeof line, p)!=NULL){
printf("%s", line);
strncpy(string[i], line, 17);
i++;
numLinhas++;
}
fclose(p);
char *temp[numLinhas];
,它进入其中在string [i]
存储文件中包含的语句的含义的循环之后。以下示例和三个示例的开头如下所示:
for (i = 0; i<numLinhas; i++){
sscanf(string[i], "%s %s %s %s" ,str1, str,str2, str3);
if(str[0]=='0' && str[1] == '0' && str[2]!= 'd') {
temp[i] = "NOP";
count++;
}
if(str[0]=='0'&& str[1] == '6' && str[2]!= 'd') {
sprintf(temp[i],"%s,%s" , "MVI B", str2);
count = count+2;
}
if(str[0]=='0'&& str[1] == '7' && str[2]!= 'd') {
temp[i] = "RLC";
count++;
}
错误很随意 - 它并不总是会发生。它通常发生在打电话给sprintf的时候。 啊是的!下面是我正在加载的txt文件:
0000 21a 11r 00r
0003 7Ea
0004 21a 12r 00r
0007 46a
0008 80a
0009 21a 13r 00r
000C 77a
000D 3Ea 01a
000F 3Da
0010 76a
0011 0Ad
0012 03d
0013 01d
刚刚看到了一些新东西。这里的编译窗口我越来越:
[email protected]:~/Desktop$ ./paraler
0000 21a 11r 00rValor de l: 16
Valor de l: 1
0003 7Ea
Valor de l: 9
0004 21a 12r 00rValor de l: 16
Valor de l: 1
0007 46a
Valor de l: 9
0008 80a
Valor de l: 9
0009 21a 13r 00rValor de l: 16
Valor de l: 1
000C 77a
Valor de l: 9
000D 3Ea 01a
Valor de l: 13
000F 3Da
Valor de l: 9
0010 76a
Valor de l: 9
0011 0Ad
Valor de l: 9
0012 03d
Valor de l: 9
0013 01d
Valor de l: 9
string:0000 21a 11r 00r
string:
string:0003 7Ea
string:0004 21a 12r 00r
string:
string:0007 46a
string:0008 80a
string:0009 21a 13r 00r
string:
string:000C 77a
string:000D 3Ea 01a
string:000F 3Da
string:0010 76a
string:0011 0Ad
string:0012 03d
string:0013 01d
Segmentation fault
奇怪的是,我得到的字符串数组的一些空的空间......它有什么关系的错误?
您是否尝试过在调试器中运行代码? – nmichaels 2010-11-30 16:17:58
第1步将用安全snprintf替换不安全的sprintf。 – 2010-11-30 16:19:30
请做一些关于你的代码格式化。第二个钻头的缩进看起来很糟糕。 – JeremyP 2010-11-30 16:26:34