我想了解如何让这段代码正常工作,我在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;
}
答案 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(),它将为您复制它们。