我是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」只是添加。第二個評論顯示它崩潰的地方
感謝您的快速回答!
您是否可能在scanf中輸入了超過100個字符的輸入內容?我也希望看到確切的錯誤,即使是西班牙文,但谷歌翻譯是你的朋友在那裏。 –
不應該崩潰到那裏,除非你輸入的字符串超過99個字符... – Torp
好吧,如果5分鐘後,我們沒有正面答案,我會說「發佈更多的代碼」,因爲有在其他地方可能會破壞造成問題的記憶的可能性很大。 –