一个简单的C练习出错:试图返回一个指向两个字符串数组的指针
“返回指向两个字符串数组的指针。第一个是字符 索引为偶数的字符串,第二个是 处于奇数指数的s“一个简单的C练习出错:试图返回一个指向两个字符串数组的指针,c,C,“返回指向两个字符串数组的指针。第一个是字符 索引为偶数的字符串,第二个是 处于奇数指数的s“ char**奇偶校验字符串(const char*s){ 字符**奇偶性=malloc(sizeof(字符*)*2); 字符偶数_字符串[]=“”; 字符奇数_字符串[]=“”; int x=0; int y=0; 对于(int i=0;i
char**奇偶校验字符串(const char*s){
字符**奇偶性=malloc(sizeof(字符*)*2);
字符偶数_字符串[]=“”;
字符奇数_字符串[]=“”;
int x=0;
int y=0;
对于(int i=0;i
我的逻辑是有道理的,但输出总是不正确的。例如,输入
abababab
时,我返回abababab
,而预期的输出是aaa bbb abababab
。我做错了什么?偶数字符串和奇数字符串都是大小为1的数组。您的代码写得越界(偶数字符串[x]=s[i]
,奇数字符串[y]=s[i]
)。此外,它们是局部变量,一旦奇偶校验字符串
返回,就不再存在,因此返回的指针是垃圾。偶数字符串
和奇数字符串
都是大小为1的数组。您的代码写得越界(偶数字符串[x]=s[i]
,奇数字符串[y]=s[i]
)。此外,它们是局部变量,一旦奇偶校验字符串
返回,它们就不再存在,因此返回的指针是垃圾。名为偶数字符串
的字符串是局部变量,因此在函数返回后其内存将被释放,因此尝试将指向它的指针返回给调用方是无效的
尝试更改此行:
char even_strings[] = "";
对这样的事情:
char * even_strings = malloc(some_size);
这同样适用于您的奇数_字符串
字符串
另外,一定要为
某些大小选择一个合适的值,这样你的程序就可以为每个字符串分配足够的内存,这样它就可以保存你正在写入的所有数据。名为偶数字符串的字符串是一个局部变量,因此在你的函数返回后,它的内存将被释放,因此,尝试将指向它的指针返回给调用方是无效的
尝试更改此行:
char even_strings[] = "";
对这样的事情:
char * even_strings = malloc(some_size);
这同样适用于您的奇数_字符串
字符串
另外,一定要为某些大小选择一个合适的值,以便程序为每个字符串分配足够的内存,以便它可以保存您正在写入的所有数据。char even_strings[]=“”代码>的长度为1-终止符。因此索引偶数_字符串[x]=s[i]代码>是UB,返回指向已经退出生命的本地字符串的指针也是如此。您可以考虑查看C是如何再次处理字符串的。它们不是高级对象,而是由char
组成的数组,用ASCII码填充,最后是一个nul
零。不是可以用作右值的东西。(尽管指向字符串,但您可以)char偶数字符串[]=”代码>的长度为1-终止符。因此索引偶数_字符串[x]=s[i]代码>是UB,返回指向已经退出生命的本地字符串的指针也是如此。您可以考虑查看C是如何再次处理字符串的。它们不是高级对象,而是由char
组成的数组,用ASCII码填充,最后是一个nul
零。不是可以用作右值的东西。(指向字符串的指针,你可以)谢谢你!那很有帮助,谢谢!这很有帮助。