J'écris un code qui remplace le mot-X par le mot-Y.C Pointers & Memory - a écrit un code ... throw exception
- chaque mot dans le texte est de la même longueur.
- Disons que ma chaîne, X, Y sont:
"aaa bbb ccc ddd QQQ", X = 2, Y = 5
il imprimera: « aaa QQQ ccc ddd bbb "
mais pour une raison quelconque que je ne comprends pas me jeter l'exception. j'ai écrit dans le code où est l'erreur. Je sais que mon code est un peu en désordre donc si vous avez aussi des suggestions je serai heureux d'entendre.
Merci!
void changeWords(char *s,int X, int Y)
{
int len,words,i,count;
len = count = words = i = 0;
bool flag = false;
while (s[len] != ' ')
len++;
char *p1 = (char*)malloc(sizeof(char)*(len+1));
if (p1== NULL)
{
printf("Error: memory did not allocated");
exit(1);
}
char *p2 = (char*)malloc(sizeof(char)*(len+1));
if (p2== NULL)
{
printf("Error: memory did not allocated");
exit(1);
}
while (flag == false)
{
if (count == (X-1))
{
for(int x = 0; x< len;x++,i++)
p1[x] = s[i];
}
else if (count == (Y-1))
{
for (int x = 0; x< len; x++,i++)
p2[x] = s[i];
flag = true;
}
if (s[i] == ' ')
count++;
i++;
}
p1[len] = p2[len] = '\0';
i = count = 0;
flag = false;
while (flag == false)
{
if (count == (X-1))
{
for (int x = 0; x< len; x++, i++)
s[i] = p1[x]; // here it throw an error "Unhandled exception thrown:.."
}
else if (count == (Y-1))
{
for (int x = 0; x< len; x++, i++)
s[i] = p2[x];
flag = true;
}
if (s[i] == ' ')
count++;
i++;
}
puts(s);
free(p1); free(p2);
}
void main()
{
char*str = (char*)malloc(sizeof(char));
if (str == NULL)
{
printf("Error: memory did not allocated");
exit(1);
}
char ch;
int i = 0;
printf("Enter a string: ");
while ((ch = getchar()) != '\n')
{
str[i] = ch;
i++;
str = realloc(str, sizeof(char) * (i + 1));
if (str == NULL)
{
printf("Error: memory did not allocated");
exit(1);
}
}
str[i] = '\0';
func(str,3,5);
printf("new string: %s\n", str);
free(str);
system("pause");
}
}
Avez-vous parcouru votre code dans le débogueur et inspecté les valeurs sur la ligne que vous avez marquée? – xxbbcc
Les littéraux de chaîne ne peuvent pas être modifiés. – BLUEPIXY
's' est un littéral de chaîne, et vous le modifiez dans' changeWords', qui est un comportement indéfini. Changez cela en 'char str [] =" aaa bbb ccc ddd qqq ";' (mais aucune garantie c'est le seul problème) – yano