你好我在CONV函数中写入第二个FOR之后得到了这个错误,每个FORs都可以正常工作但是由于某些原因我把两个都放在函数内时会出现溢出。请帮忙。
#pragma warning(disable: 4996)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct nodo{
char dato[100];
struct nodo *sig;
}*pun;
typedef struct nodos{
char nom[50];
int num[20];
struct nodos *sig;
}*puns;
void cargar(pun &top,pun &fin);
void mostrar(pun &top);
void conv(pun &top,pun &fin,puns &tops,puns &fins);
int main(){
pun top=NULL,fin=NULL;
puns tops=NULL,fins=NULL;
cargar(top,fin);
conv(top,fin,tops,fins);
mostrar(top);
}
void cargar(pun &top,pun &fin){
FILE *arch;
pun aux=NULL;
arch=fopen("nombres.txt","rt");
if(arch==NULL){
printf("No se puede abrir el archivo \n");
}else{
while(!feof(arch)){
if(top==NULL){
top=(nodo *)malloc(sizeof(nodo));
fgets(top->dato,100,arch);
fin=top;
}else{
aux=(nodo *)malloc(sizeof(nodo));
fgets(aux->dato,100,arch);
fin->sig=aux;
fin=aux;
}
}
fin->sig=NULL;
}
}
void mostrar(pun &top){
pun aux=top;
while(aux!=NULL){
puts(aux->dato);
aux=aux->sig;
}
}
void conv(pun &top,pun &fin,puns &tops,puns &fins){
pun aux=top;
puns auxs=tops;
char nom[50],num[50],*p;
int i,j=0,a;
while(aux!=NULL){
p=strchr(aux->dato,' ');
for(i=0;i<p-aux->dato+1;i++){
nom[i]=aux->dato[i];
}
nom[i]='\0';
for(i;i<50;i++){
num[j]=aux->dato[i];
j++;
}
num[j]='\0';
aux=aux->sig;
}
}
答案 0 :(得分:2)
您只需启动j
一次。然后在for
循环内多次执行此while
循环。
for(i;i<50;i++){
num[j]=aux->dato[i];
j++;
}
第一次执行时,该循环很好。对于while
循环的后续迭代,j
不在num
的末尾。
事实上,当您第一次执行num[j]='\0'
时,j
为50
,因此您将访问num
的末尾。
我真的不知道你的代码想要实现什么,所以无法提出解决方案。显然,您需要避免在num
的有效范围之外访问。