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

标签 c arrays char

我想做这样的事情:

#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/

相关文章:

c - 如何解决打开.exe文件时闪烁(程序结束后立即关闭)的问题?

c - 指针数组问题

c - 为什么这个交换程序不能用 C 语言运行?

php - 比较两个数组,两个数组之间是否有相同的元素?

arrays - Array .push 在每个循环内返回用相同对象填充的数组

javascript - 检查对象数组中的对象中是否存在值

结构中的 C 2 维字符

c++ - 如何在共享对象构建中包含子目录

c++ - 如何操作字符数组

c - 通过获取字符存储字符串