我无法使下面的算法在没有索引的情况下工作(索引可以正常工作)。这对我的大学来说是一个小练习,其中一个要求是我只能使用"指针参考"遍历我分配的数组(frase),而不是索引。我已经尝试过最后让它发挥作用的评论,我放弃了,因为我尝试的任何东西都不起作用...感谢您的帮助。
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
int main(){
char* frase;
frase = malloc(sizeof(char) * 100);
gets(frase);
/*
while(*frase != '\0'){
printf("%c", *frase);
frase++;
}
*/
int i = 0;
while(frase[i]){
printf("%c", toupper(frase[i]));
i++;
}
printf("\n");
free(frase);
}
答案 0 :(得分:3)
问题是你释放了一个已经改变的指针(事实上,frase
已经使用frase++
递增了)
然后free(frase)
不起作用。
答案 1 :(得分:3)
通过使用“仅指针”,您指向一个元素,处理它然后将指针递增以指向下一个元素:
char *pfrase = frase;
while(pfrase){
printf("%c", toupper(pfrase));
pfrase++;
}
答案 2 :(得分:1)
传递给free
的参数的值必须是malloc
函数族之一返回的指针。如果将不同的值传递给free
,则程序具有未定义的行为。
使用时:
frase = malloc(sizeof(char) * 100);
gets(frase);
while(*frase != '\0'){
printf("%c", *frase);
frase++;
}
free(frase);
您正在使用指针调用free
,该指针的值不同于malloc
返回的值。这是未定义行为的原因。
解决此问题的一种方法是使用索引访问数组。
解决此问题的另一种方法是使用不同的变量来迭代数组的内容。
frase = malloc(sizeof(char) * 100);
gets(frase);
// Don't modify frase. Use another variable to iterate
char* cp = frase;
while(*cp != '\0'){
printf("%c", *cp);
cp++;
}
free(frase);
答案 3 :(得分:-1)
随着每个人的回复,我的算法现在正在运行。现在就是这样:
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
int main(){
char* frase;
frase = malloc(sizeof(char) * 100);
gets(frase);
char* pointer = frase;
while(*pointer){
printf("%c", toupper(*pointer));
*pointer++;
}
printf("\n");
free(frase);
free(pointer);
}
不要编辑我的“frase”数组和无用的免费问题似乎都解决了。此外,我知道获取问题,但这个算法是一个练习。谢谢大家的帮助!