如何在C开放VMS中将char指针转换为char

如何在C开放VMS中将char指针转换为char,c,ansi,vms,C,Ansi,Vms,这是将char指针转换为char 我遵循了另一个主题的代码,但它似乎对我不起作用。 我正在为此使用OpenVMS Ansi C编译器。我不知道这有什么区别 另一个平台 main(){ char * field = "value1"; char c[100] = (char )field; printf("c value is %s",&c); } 这个的输出是 c value is 这对我来说是出乎意料的,我期待着 c value is value1 希望你能帮助我 strcp

这是将char指针转换为char

我遵循了另一个主题的代码,但它似乎对我不起作用。 我正在为此使用OpenVMS Ansi C编译器。我不知道这有什么区别 另一个平台

main(){

char * field = "value1";
char c[100] = (char )field;

printf("c value is %s",&c);
}

这个的输出是

c value is
这对我来说是出乎意料的,我期待着

c value is value1
希望你能帮助我

strcpy(c, field);
您必须确保
c
有空间容纳
字段中的所有字符,包括NUL终止符。在这种情况下确实如此,但一般来说,您需要进行if检查

编辑:在C中,不能从函数返回数组。如果需要分配存储,但不知道长度,请使用
malloc
。例如:

size_t size = strlen(field) + 1; //  If you don't know the source size.
char *c = malloc(size);
然后,使用与前面相同的
strcpy
调用

您必须确保
c
有空间容纳
字段中的所有字符,包括NUL终止符。在这种情况下确实如此,但一般来说,您需要进行if检查

编辑:在C中,不能从函数返回数组。如果需要分配存储,但不知道长度,请使用
malloc
。例如:

size_t size = strlen(field) + 1; //  If you don't know the source size.
char *c = malloc(size);

然后,使用与前面相同的strcpy调用。

在C中,
char
类型包含单个字符,而不是字符串<代码>字符c[100]
不分配长度为100的
char
,它分配一个由100个连续
char
s组成的数组,每个字节长,该数组可以容纳一个字符串

因此,您似乎想用
char*
指向的位置处相同的
char
值填充
char
数组。为此,您可以使用
strncpy()
或其他任何函数:

strncpy(c,field,100); /* copy up to 100 chars from field to c */
c[99] = '\0';         /* ..and make sure the last char in c is '\0' */
…或使用
strcpy()
,因为您知道字符串将适合
c
(在这种情况下更好):

…或:


在C语言中,
char
类型包含单个字符,而不是字符串<代码>字符c[100]
不分配长度为100的
char
,它分配一个由100个连续
char
s组成的数组,每个字节长,该数组可以容纳一个字符串

因此,您似乎想用
char*
指向的位置处相同的
char
值填充
char
数组。为此,您可以使用
strncpy()
或其他任何函数:

strncpy(c,field,100); /* copy up to 100 chars from field to c */
c[99] = '\0';         /* ..and make sure the last char in c is '\0' */
…或使用
strcpy()
,因为您知道字符串将适合
c
(在这种情况下更好):

…或:


strncpy()
strncpy()
可以使目标缓冲区未终止(即不包含字符串),或者在只需要一个字符时,可以不必要地使用多个
'\0'
字符填充它。在确认目标缓冲区足够大后,最好使用
strcpy()
。@KeithThompson在上面的示例中,字符串显式以null结尾。关于可能填充额外的空字符,您确实有一个观点。。。虽然在源字符串长度未知的情况下,在
strcpy()
之前调用
strlen()
并不一定更快。
strncpy()
不仅仅是
strcpy()
的更安全版本(正如
snprintf()
sprintf()
的更安全版本)
strncpy()
可以使目标缓冲区未终止(即不包含字符串),或者在只需要一个字符时,可以不必要地使用多个
'\0'
字符填充它。在确认目标缓冲区足够大后,最好使用
strcpy()
。@KeithThompson在上面的示例中,字符串显式以null结尾。关于可能填充额外的空字符,您确实有一个观点。。。虽然在源字符串的长度未知的情况下,在
strpy()之前调用
strlen()
并不一定更快。您好,谢谢大家的回答。。。它确实奏效了。但是我可以像这个场景一样创建自己的函数吗?例如conv_ptr_str函数,它将指针字符转换为字符;说char*field=“value1”;字符c[100]=(字符)字段;字符c=conv_ptr_str(字段);这样我就可以重复使用资源,或者这是转换东西的唯一方法?大家好,谢谢你们的回答,伙计们。。。它确实奏效了。但是我可以像这个场景一样创建自己的函数吗?例如conv_ptr_str函数,它将指针字符转换为字符;说char*field=“value1”;字符c[100]=(字符)字段;字符c=conv_ptr_str(字段);这样我就可以重复使用这些资源,或者这是转换东西的唯一方法?