如何在C开放VMS中将char指针转换为char
这是将char指针转换为char 我遵循了另一个主题的代码,但它似乎对我不起作用。 我正在为此使用OpenVMS Ansi C编译器。我不知道这有什么区别 另一个平台如何在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
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(字段);这样我就可以重复使用这些资源,或者这是转换东西的唯一方法?