gpt4 book ai didi

C将char数组传递给函数,用另一个char数组计算并复制

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:57 26 4
gpt4 key购买 nike

我想做这样的事情:

#include <stdio.h>

char * myfunction(char * in);
void myfunction2(char * in, const char ** content);

int main(){
char * name="aName";
char * result = myfunction(name);
return 0;
}

char * myfunction(char * in) {
const char *test = NULL;
myfunction2(in, &test);
return test; // I would like to return the value of test
}

void myfunction2(char * in, const char ** content) {
char input[1024];
//do some stuff to fill input
*content = input;
}

但我做不到,有时会打印一些奇怪的字符......

谢谢你的回复,我现在明白了,但我被困在问题的另一面。我没有准确地编写我的用例,所以我对其进行了编辑以使其完整。

最佳答案

这段代码中最明显的错误是:

  1. myfunction 隐式声明为 int myfunction();
  2. 您的指针的常量性不正确。
  3. 没有为 main() 提供返回值

myfunction 隐式声明为 int myfunction();

这很容易解决,当这种情况发生时,您的编译器应该大声对您咆哮。作为 C 的一项遗留功能,当遇到函数调用时,无论是通过原型(prototype)还是定义,都不知道正式声明,该函数被假定为返回 int 并接受可变数量的参数。因此,在 main() 中,您的调用被假定为一个如下所示的函数:

int myfunction();

稍后当遇到 real myfunction 时,至少你的编译器应该警告你声明如何不匹配预期的类型(因为这次它认为它是 int myfunction())。然而,即便如此,调用仍应通过,但依赖于此是很糟糕的做法。在使用前正确制作函数原型(prototype)。


所有指针的数据类型都不正确。

函数中的字符串文字未绑定(bind)到本地数组空间。它是一个只读数据缓冲区,位于程序数据 block 中某处的只读段中。正确的声明是这样的:

const char *test = "mytest";

但这会产生链式 react ,需要更改此代码的其余部分,稍后您就会看到。


没有为 main() 提供返回值

main() 的结论要明确。显然 C99 允许你跳过这个并且实现是应该为你返回 0。不要给他们那种快乐;自己捕获。


解决上述所有问题......

#include <stdio.h>

void myfunction(const char** in);

int main()
{
const char *result = NULL;
myfunction(&result);
printf("in main() %p : %s\n", result, result);
return 0;
}

void myfunction(const char** in)
{
const char* test = "mytest";
printf("in myfunction() %p : %s\n", test, test);
*in = test;
}

输出(因实现而异)

in main() 0x8048580 : mytest
in myfunction() 0x8048580 : mytest

See it live .

关于C将char数组传递给函数,用另一个char数组计算并复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com