Program received signal SIGTRAP, Trace/breakpoint trap
#include<stdio.h>#include<stdlib.h>
#define INCREMENT 10
#define INIT_SIZE INCREMENT
int main()
{
char ch;
char *str;
char *last;
int limit = 0;
int times = 1;
int count = 0;
str = (char *)malloc(sizeof(char) * INCREMENT);
if(str == NULL)
{
exit(1);
}
last = str;
printf("请输入一个字符串:");
while((ch = getchar()) != '\n')
{
last = ch;
if(limit >= INCREMENT)
{
str = (char *)realloc(str, INCREMENT * times + INCREMENT);
last += 10;
}
count++;
}
last = '\0';
printf("反转后的结果是:");
for(int i = count;i >= 0;i--)
{
printf("%c", str);
}
return 0;
}
请问这个报错是什么意思呀,不太理解为什么,我输入I love FishC! 翻转后会出现乱码,有的时候就不会出现乱码 执行完33行之后,last还指向str吗?
#include<stdio.h>
#include<stdlib.h>
#define INCREMENT 10
#define INIT_SIZE INCREMENT
int main()
{
char ch;
char *str;
char *last;
int limit = 0;
int index = 0;
int times = 1;
int count = 0;
//str = (char *)malloc(sizeof(char) * INCREMENT);
str = malloc(INCREMENT); // 没有必要强制转换,没有必要乘以sizeof(char)
// 因为 sizeof(char) == 1
if(str == NULL)
{
exit(1);
}
last = str;
limit = INCREMENT;
printf("请输入一个字符串:");
while((ch = getchar()) != '\n')
{
last = ch;
if(index >= limit)
{
//str = (char *)realloc(str, INCREMENT * times + INCREMENT);
str = realloc(str, INCREMENT * times++ + INCREMENT);
last = str;
limit += INCREMENT;
}
count++;
}
last = '\0';
printf("反转后的结果是:");
for(int i = count;i >= 0;i--)
{
printf("%c", str);
}
free(str); // 内存也不释放?谁教给你的?
printf("\n"); // 行也不换
return 0;
}
本帖最后由 人造人 于 2023-1-2 13:54 编辑
#include <stdio.h>
#include <stdlib.h>
#define INCREMENT 10
int main(void) {
char *str = NULL;
size_t index = 0;
size_t limit = 0;
printf("请输入一个字符串:");
while(1) {
int ch = getchar();
if(ch == '\n' || ch == EOF) break;
if(index >= limit) {
char *temp = realloc(str, limit += INCREMENT);
if(!temp) {free(str); return -1;}
str = temp;
}
str = ch;
}
printf("反转后的结果是:");
while(--index != -1) putchar(str);
puts("");
free(str);
return 0;
}
人造人 发表于 2023-1-2 13:39
谢谢哥,明白了
页:
[1]