【发布时间】:2021-01-13 18:47:42
【问题描述】:
我正在尝试编写一个函数,该函数将返回每个单词中最大的 ASCII 字母。
所以我的字符串是 { "hello", "and", "good", "morniny" }; 我的返回值应该是“onoy”。
我正在为此苦苦挣扎,并不断收到我的变量“returnedstring”已损坏的错误:
围绕变量“returnedstring”的堆栈已损坏。
我在“MaxLetterToNewString”函数的最后一行收到此错误。 我尝试了许多解决方法,甚至释放了这个变量。 为什么会出现此错误?
我应该怎么做才能修复它?
本来我是用函数来返回值的,但是由于 它没有用,我想在 a 中获得价值 我称为“jr”(JustReturn)的新变量。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char MaxLetterToNewString(char *str[], int size, char *jr);
void main()
{
char* blabla = " ";
char* arr[] = { "hello", "and", "good", "morniny" };
//char newarr[] = { NULL };
char newarr;
int size = 0;
size = sizeof(arr) / sizeof(char*);
//*newarr = (char*)malloc((size+1) * sizeof(char));
newarr = MaxLetterToNewString(arr, size, *blabla);
if (*arr == '\0')
printf("Memory not allocated");
else
puts(*arr);
free(*arr);
}
char MaxLetterToNewString(char *str[], int size,char *jr)
{
int wordsize, letterstillnow = 0;
char returnedstring[] = {NULL};
char resultarr = '\0';
for (int k = 0; k < size; k++)
{
wordsize = strlen(str[k]);
for (int i = 0, j = i + 1; j < wordsize; i++, j++)
{
if (str[k][i] >= str[k][j])
resultarr = str[k][i];
else
resultarr = str[k][j];
}
returnedstring[k] = resultarr;
returnedstring[k + 1] = '\0';
}
jr = returnedstring;
}
【问题讨论】:
-
char returnedstring[]={NULL};不会分配足够的内存,函数调用者也不能使用它(如果这是有意的话)。函数本身不返回值,请查看编译器警告。 -
最终
free(*arr);inmain也不会对你有任何好处。