Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
它';是否可以使用malloc生成typedef或定义char指针?_C - Fatal编程技术网

它';是否可以使用malloc生成typedef或定义char指针?

它';是否可以使用malloc生成typedef或定义char指针?,c,C,我想做的是让string256的行为像:char*s=(char*)malloc(256) 并使用它 strncpy(s, "__test__", 9) s[9] = 0x00; string256 s; p.s.typedef或define或函数代码长度无关紧要。只关系到你的生活; 我不会忘记使用免费或错误检查 完整代码如下所示: __Free_String_if_Flag_true __Zero_Memory __check_for_Errors __string_256 strin

我想做的是让string256的行为像:
char*s=(char*)malloc(256)

并使用它

strncpy(s, "__test__", 9)

s[9] = 0x00;
string256 s;
p.s.typedef或define或函数代码长度无关紧要。只关系到你的生活; 我不会忘记使用免费或错误检查

完整代码如下所示:

 __Free_String_if_Flag_true __Zero_Memory __check_for_Errors __string_256 string256
并使用它

strncpy(s, "__test__", 9)

s[9] = 0x00;
string256 s;
简言之,没有

typedef定义类型的名称<代码>字符*s=(字符*)malloc(256)
是变量声明,而不是类型

你也许可以用宏实现类似的功能,但我强烈建议你不要这样做(首先,这会掩盖一个事实,即在某个时候,免费的代码是必要的)

typedef定义类型的名称<代码>字符*s=(字符*)malloc(256)是变量声明,而不是类型


您可能可以使用宏实现类似的功能,但我强烈建议您不要使用宏(首先,它会掩盖这样一个事实,即在某个时候需要使用
免费

您可以对字符数组进行typedef:

typedef char char256[256];

char256 s ;
s[255] = '\0' ;

变量超出范围时将停止存在,但如果希望持久化,可以将其设置为全局变量。

可以设置字符数组的typedef:

typedef char char256[256];

char256 s ;
s[255] = '\0' ;

变量在超出范围时将停止存在,但如果希望持久化,可以将其设置为全局变量。

至于您的问题中询问的关于…或定义…
简而言之-是的,你可以:(对其他一些评论/回答部分表示异议)
然而,我也同意这些答案,即使用#defines可能不是此类通话的最佳形式。(但你能做到)

已编辑(从宏中删除“;”)

s现在包含“yes I can”并且以null结尾(
strcpy()
这样做)


不要忘记为
free(…)创建宏

至于你的问题中关于或定义的部分:
简而言之-是的,你可以:(对其他一些评论/回答部分表示异议)
然而,我也同意这些答案,即使用#defines可能不是此类通话的最佳形式。(但你能做到)

已编辑(从宏中删除“;”)

s现在包含“yes I can”并且以null结尾(
strcpy()
这样做)



不要忘记为
free(…)创建宏

不要这样做!如果你想弄清楚如何用这种方法,你必须记住释放所有的
string256
s。这只是一场维护噩梦!为什么要隐藏malloc()调用?如何释放字符串?你会免费编写
,还是希望该调用也被隐藏?不管所有这些(明智的建议),你可以使用#defines(见下文)来完成你的要求。接下来的问题是,为什么这不是一个好主意?这样的宏不是一个好主意。那些前缀到底是什么?不要这样做!如果你想弄清楚如何用这种方法,你必须记住释放所有的
string256
s。这只是一场维护噩梦!为什么要隐藏malloc()调用?如何释放字符串?你会免费编写
,还是希望该调用也被隐藏?不管所有这些(明智的建议),你可以使用#defines(见下文)来完成你的要求。接下来的问题是,为什么这不是一个好主意?这样的宏不是一个好主意。这些前缀到底是什么?它不是一个陈述;这是一个带有初始值设定项的声明。@wildplasser:确实是;)你只认真地注意了问题的一半。确实可以使用#define。OP可以稍后确定是否应该使用#define;这是一个带有初始值设定项的声明。@wildplasser:确实是;)你只认真地注意了问题的一半。确实可以使用#define。OP可以稍后确定是否应该使用#define。+1这很好,但仍然不是我想要的。p.s.您忘记了\string256(s):)后不要在宏define中放分号;定义一个free将是多余的;及(s);;它与char*s=(char*)malloc(256)相同@user3321220-您不需要(也不应该)强制转换malloc()的返回。另外,关于我提供的示例中的“\”(您实际上是指我假定的“\0”),它没有显式显示,而是使用
strcpy()
放置的。关于仍然不是我想要的。嗯,虽然我对你的想法没有真正的了解,但这似乎正是你想要的。说得更清楚些。当然……那些有多年经验的专家可能只是个傻瓜+1这很好,但仍然不是我想要的。p.s.您忘记了\n在string256(s)之后:)不要在宏定义中放置分号;定义一个free将是多余的;及(s);;它与char*s=(char*)malloc(256)相同@user3321220-您不需要(也不应该)强制转换malloc()的返回。另外,关于我提供的示例中的“\”(您实际上是指我假定的“\0”),它没有显式显示,而是使用
strcpy()
放置的。关于仍然不是我想要的。嗯,虽然我对你的想法没有真正的了解,但这似乎正是你想要的。说得更清楚些。当然……那些有多年经验的专家可能只是个傻瓜。