将ptr分配给char指针

时间:2016-01-09 19:28:00

标签: c pointers

我想了解如何让这段代码正常工作,我在main函数中的printf将不会打印“test”字符串。

#include <stdio.h>

int main()
{
char b[10];
test(b);
printf("from main func: %s\n", b);
}

int test(char* buf)
{
char len[] = "test";
char *pt = len;

printf("printing ptr: %s\n", pt);

buf = pt;

printf("from test func: %s\n", buf);

return 1;
}

3 个答案:

答案 0 :(得分:0)

首先,您需要为test函数设置原型或将其置于main之上。

#include <stdio.h>
#include <string.h>

int test(char *);

int main()
{
char b[10];
test(b);
printf("from main func: %s\n", b);
}

int test(char* buf)
{
char len[] = "test";
char *pt = len;

printf("printing ptr: %s\n", pt);

strcpy(buf, pt);

printf("from test func: %s\n", buf);

return 1;
}

此外,您应该从不尝试将局部变量传递给函数。它不起作用,因此您必须使用strcpy(buf, pt);而不是将局部变量len指向buf

答案 1 :(得分:0)

您需要将字符串复制到 buf ,而不是将 pt 分配给 buf

strcpy(buf, pt);

以下是您的代码的更安全版本:

#include <assert.h>
#include <stdio.h>
#include <string.h>

#define LEN(arr) (sizeof (arr) / sizeof (arr)[0])

void test(char *buf, int bufLen)
{
    char len[] = "test";
    char *pt = len;

    assert(bufLen > strlen(len));

    printf("printing ptr: %s\n", pt);
    strcpy(buf, pt);
    printf("from test func: %s\n", buf);
}


int main()
{
    char b[10];

    test(b, LEN(b));
    printf("from main func: %s\n", b);
    return 0;
}

答案 2 :(得分:0)

你不能使用buf = pt;在C.原因是C将“test”视为单个字符列表。比如't','e','s','t'。就像一个整数数组一样,你不可能有类似的东西......

int myArray [5] = {0,1,2,3,4};

然后有类似......

int newArray [5] = myArray ...这是行不通的,好吧,一个字符数组也没有什么不同。您需要将每个字符复制到新数组,就像使用一组int一样。您可以编写自己的函数来执行此操作,或者使用其中一个可用的内置函数,如strcpy(),它将为您复制它们。

相关问题