如何在指针中存储char类型的结果?

时间:2015-06-14 08:41:42

标签: c pointers

我想在我作为函数的参数传递的指针中存储char类型的结果。像这样:

#include<stdio.h>
void try(char *);
int main()
{
    char *result;
    try(result);
    printf("%s",result);
    return 0;
}
void try(char *result)
{
    result="try this";
}

但我得到了结果:(null)

有人能告诉我这里有什么问题吗?

3 个答案:

答案 0 :(得分:2)

您的语法只发送指向该函数的指针。这允许更改指针指向的数据,但不能更改指针本身。

你需要

void try(char **result)

并将其命名为

try(&result);

更改实际指针。

另一种方法是将数据复制到指针指向的内存中,但是您需要知道有足够的可用内存。取决于实际用例如何正确执行。你可以使用

strcpy(result, "what you want");

然后你真的必须知道result指向的内存可以处理14个字符(记住最后的NULL)。在您当前的代码中,您根本不会为结果分配内存,因此这将调用未定义的行为。

您看到NULL的原因是您的编译器决定将未分配的指针初始化为NULL。另一个编译器可能会将它们初始化为随机值。

关于术语,您不会将类型char存储到指针中。你可能有一个指向char的指针,或者在这种情况下指向一个C类型的字符串,这是一个字符数组。

答案 1 :(得分:1)

您正在result函数中创建另一个变量try。 尝试在result功能中打印try。它会工作。

如果你真的想在main内打印,那就试试吧 -

#include<stdio.h>

void try(char **);

int main()
{
    char *result;
    try(&result);
    printf("%s",result);
    return 0;
}
void try(char** result)
{
    *result = "try this";
    //printf("%s\n",result);
}

或者,如果你不想进入双指针,那么这将有效:

#include<stdio.h>

char* try(char *);

int main()
{
    char *result;
    result = try(result);
    printf("%s",result);
    return 0;
}
char* try(char* result)
{
    result = "try this";
    return result;
}

答案 2 :(得分:0)

另一种方式(没有动态内存):

View v

注意:当你说你得到null时,这并不意味着什么 - 实际上你有未定义的行为 - 因为#include<stdio.h> void try(char *); int main() { char result[100] = {0}; try(result); printf("%s",result); return 0; } void try(char *result) { strcpy(result,"try this"); } 没有被初始化。我猜你甚至在尝试打印result之前调用了UB,即当你将它传递给result时。因为将在指针的该方法中进行复制,这将尝试读取原始指针的值 - 读取未初始化的变量在C中是未定义的。因此总是在C中初始化变量。