我的C代码有问题。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char* testVal = getCharValue();
printf("testVal : %s\n",testVal); //testVal = (null) why?
}
char* getCharValue()
{
char *text;
setCharValue(text);
return text;
}
void setCharValue(char* str)
{
char *a1 = "hello";
strcpy(str,a1); //error ?
}
我需要返回 char
指针值。但是这段代码并没有返回值。为什么呢?
你觉得这样做有意义吗?
编码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function Prototypes
char *getCharValue();
void setCharValue(char *str);
// main()
int main(void)
{
char* testVal;
testVal = getCharValue();
puts(testVal);
//printf("testVal : %s\n", *testVal); //testVal = (null) why?
return 0;
}
// Function Definitions
char *getCharValue()
{
char *text;
if( (text = (char *)calloc(1, 10)) == NULL)
{
printf("Memory Unavailable.\n");
exit(1);
}
setCharValue(text);
return text;
}
void setCharValue(char* str)
{
char *a1 = "Hello";
strcpy(str, a1); //error ?
}
全部使用 char
在这个程序中,指针只会指向一个字符,除了 a1
. 因为 a1
是一个 char *
, a char array
以及其名称 char array
. 所以,你可以直接点这个。
像这样 testVal<->getcharValue()->setCharValue(text)->a1
.
你正在改变存储在 text
用它的地址 setCharValue()
. 那么你返回的地址是 text
从 getCharValue()
召唤者 main()
. 在 main()
归来的地址 getCharValue()
分配给 testVal
. 所以.., testVal
只有一个地址,它的类型是 char *
.
如果你把 printf("testVal : %c\n", *testVal);
所以,为了打印存储在该地址的字符,以及该地址的字符,你应该使用以下方法来验证。puts()
函数。
我希望它能帮助你理解C语言中的指针和它们的工作原理。
你好,Lucas和Gerhardh... 谢谢你的帮助。
我的解决方案是
#include <stdio.h>
#include <stdlib.h>
void main()
{
char* testVal = getCharValue();
printf("testVal : %s\n",testVal); //testVal = (null) why?
}
char* getCharValue()
{
char *text="hello";
strcpy(str, text);
return text;
}
我的问题解决了,这个代码