我试图从函数返回一个C字符串,但它不起作用.这是我的代码.
char myFunction()
{
return "My String";
}
Run Code Online (Sandbox Code Playgroud)
在主要我称之为:
int main()
{
printf("%s",myFunction());
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了一些其他的方法,myFunction但他们没有工作.例如:
char myFunction()
{
char array[] = "my string";
return array;
}
Run Code Online (Sandbox Code Playgroud)
注意:我不允许使用指针!
关于这个问题的小背景:有一个功能是找出它是哪个月; 如果它1然后它返回1月等等
因此,当它打印时,它就是这样做的.printf("Month: %s",calculateMonth(month));.现在的问题是如何从calculateMonth函数中返回该字符串.
正如标题所说,有什么区别
char a[] = ?string?; and
char *p = ?string?;
Run Code Online (Sandbox Code Playgroud)
这个问题在接受我采访时被问到了.我甚至不理解这个说法.
char a[] = ?string?
Run Code Online (Sandbox Code Playgroud)
什么是?运营商?它是字符串的一部分还是具有某些特定含义?
这段代码有效吗?
const char* foo() {
return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
也就是说,从C函数返回"Hello World".
const char* str = foo();
Run Code Online (Sandbox Code Playgroud)
str是一个悬垂的指针吗?
PS:上面的函数是从一些实际代码中抽象出来的.我看到有人编写直接返回字符串文字的代码.
我是C的初学者,我正在自学.我正在创建以下功能:
char *foo(int x){
if(x < 0){
char a[1000];
char b = "blah";
x = x - 1;
char *c = foo(x);
strcpy(a, b);
strcat(a, c);
return a;
}
blah ...
}
Run Code Online (Sandbox Code Playgroud)
我基本上试图返回一个附加的字符串,但我收到以下错误:
"错误:函数返回局部变量的地址",任何建议,如何解决这个问题?
我对C结构和数据类型有疑问.我有一个名为的结构test:
struct test
{
char* c;
char* c2;
};
Run Code Online (Sandbox Code Playgroud)
我从函数返回这个结构:
struct test a()
{
struct test t = { "yeah!", "string" };
return t;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是结构的内存是自动释放还是我必须通过手动执行此操作free().
[ 评论更新:]
函数a在DLL中,我想在主程序中使用struct.
您好我有点困惑
char *func()
{
return "Hello";
}
Run Code Online (Sandbox Code Playgroud)
这里"Hello"是字符序列/数组.它是一个局部变量,一旦函数返回它就必须消失.那我们怎么能得到正确的价值呢?
我有以下代码:
char* get_address_string(PACKAGE* pkg){
char *c;
sprintf(c, "%02x:%02x:%02x:%02x:%02x:%02x", pkg->address[0], pkg->address[1],
pkg->address[2], pkg->address[3], pkg->address[4], pkg->address[5]);
return c;
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常.但是,我知道这不是在C中返回字符串的正确方法.我收到警告"c在此函数中使用未初始化".
在C中编写此函数的正确方法是什么?
第一个给大家,第一个发布在这里.
今天我发现自己想知道这段代码是否正确,它是由朋友写的时间用于微控制器,我没有机会再问他了.
该程序工作正常,但我不能真正决定它是否运气好运(不要相信编程运气).我甚至不知道这篇文章的标题是否正确,对不起,如果它可能会产生误导.代码:
char *textStatusErrorMessage( unsigned int codeStatus )
{
switch ( codeStatus ) {
case STATUS_1:
return ( (char *) " Status: 1 " );
break;
case STATUS_2:
return ( (char *) " Status: 2 " );
break;
default:
sprintf( tmpBuf, " UNKNOWN STATUS %03d ", codeStatus );
return ( (char *) tmpBuf ); //tmpBuf is global
break;
}
}
Run Code Online (Sandbox Code Playgroud)
更准确地说,这种语法对我来说有点模糊.
return ( (char *) " Status: 1 " );
Run Code Online (Sandbox Code Playgroud)
它返回什么的char*?保存"Status:1"字符串在哪里?堆/堆栈???
实现时,字符串在函数的范围内,我假设在使用return语句离开函数后,我无法控制函数本身返回的指针.
从我看到的方式来看,我将拥有一个具有不同可能的字符串选项的全局数组,并返回指向CASE选择的正确数组的指针.所以我知道我返回的指针是一个明确定义的内存区域.
那么这段代码是错还是不错?哪个是最正确的解决方案?
谢谢DAN
char * p_one = "this is my first char pointer";
char * p_two= "this is second";
strcpy(p_one ,p_two);
Run Code Online (Sandbox Code Playgroud)
考虑上面的代码.这会导致访问冲突错误.所以请帮助理解
"this is my first char pointer"字符串存储在内存中的哪个位置?堆或堆栈strcpy,即使它已经存储了第一个字符串.为什么"this is second"字符串不能复制到同一位置?strcpy那么"this is my first char pointer"p_one指向的字符串会发生什么?它留在记忆中吗?strcpy知道特定指针是否分配了内存?考虑这段代码:
char *test() {
return "HELLO";
}
int main() {
char *p = test();
printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)
这会在没有警告的情况下进行编译,我猜是因为"HELLO"它没有存储在堆栈中。但这给了我一个警告:
char *test() {
char arr[] = "HELLO";
return arr;
}
int main() {
char *p = test();
printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
字符串文字真的存储在称为字符串文字池的区域中吗?
如果是这样,存储在字符串文字池中的数据是否可以被视为全局数据?
从函数返回字符串文字总是安全的(因为它是全局的)?