저는 C 언어로 새로운데, 제가 발견 한 몇 가지 연습 문제를 시도하고 있습니다.C에서 포인터로 스택 오버플로
실습 중 하나에서 문자열 (char 배열)에 대한 포인터를 사용하려고하는데 작동하지 않습니다. 그것은 컴파일하지만 실행될 때 "스택 오버플로"가 발생합니다 (글쎄, 나는 "스택 오버플로"라고 생각합니다. 스페인어로 사용하기 때문입니다).
이 문제가있는 줄은 다음과 같습니다
//This is the variable declaration, before this, there is the "main function" declaration
char entrada[100];
char *ult=entrada;
char cantidadstr[10];
int i,j,k = 0;
int res;
scanf ("%s",entrada);
printf ("\n%s",entrada);
//Here crashes
printf ("Hola %s",ult);
while (*ult != "\0"){
//And here there's more code
가 사전에 감사합니다!
편집
(나는 내 질문에 대답 할 수 :)) 이 그럼, 코드의 좀 더 게시합니다.
내가 실행할 때 데이터를 삽입 한 후, 그것은 "Violación 드 segmento"가 발생하고, 구글은 그 스택 오버플로를 의미 말한다
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void){
char entrada[1001*11*101];
/*Asi tenemos el tamano maximo:
1001 por las 1000 posibles lineas, mas la primera
11 por el tamano maximo del numero (1 + 9 ceros), mas el espacio o salto de linea siguiente
101 por el numero de numeros por linea, mas el primero
*/
char *ult=entrada;
char cantidadstr[10];
int i,j,k = 0;
int res;
memset (entrada,'\0',1001*11*101);
scanf ("%s",entrada);
printf ("\n%s",entrada);
//poniendo ese print ahi arriba, ese me lo muestra, por tanto, el fallo esta en el puntero de debajo de esta linea
printf ("Hola %s",ult);
while (*ult != "\0"){
if(*ult == "\n"){
if(i != 0){
printf("\n");
}
i++;
j = 0;
}
else if(i != 0){
if(*ult == " "){
j++;
k=0;
res = atoi(cantidadstr);
printf("%d ",res*2);
//Este es el otro cambio que hablaba
cantidadstr[10] = '\0';
}
else if(j != 0){
cantidadstr[k] = *ult;
}
}
k++;
*ult++;
}
return 0;
}
이 주석으로, 정확한 전체 코드 다른 포럼을위한 스페인어. "entrada"의 크기는 연습에서 보내는 모든 데이터에 대해 충분히 크다. "memset"이 방금 추가되었습니다. 두 번째 댓글은 어디에서 충돌이 발생하는지 보여줍니다.
빠른 답변 감사합니다 !! 이 컴파일하고 (지금까지 내가 생각할 수있는)
제대로 실행하지만 while 루프는 내가 그것을 귀하의 경우 컴파일하는 방법을 모르겠어요에 오류가로
아마도 scanf에 100 자 이상의 입력을 입력하고 있습니까? 나는 또한 정확한 오류를보고 싶습니다, 심지어 스페인어로, google translate는 귀하의 freind입니다. –
입력 한 문자열이 99자를 초과하지 않는 한 충돌하지 않아야합니다 ... – Torp
5 분 후에도 긍정적 인 답변이 없으면 "더 많은 코드 게시"라고 말합니다. 뭔가 다른 곳에서 메모리를 손상 시켜서 문제가 발생할 가능성이 큽니다. –