如何在C中将char []转换为char *?

时间:2012-01-25 17:20:13

标签: c type-conversion

问题非常简单。如何在C中将char[]转换为char*? 我真的很难找到解决方案。所以你的帮助非常感谢:)

这就是我需要这个的原因:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d); // print a formatted text to string (char[])
strcat(buffer,currentPath); // currentPath is of data type char[]
strcat(buffer,"\\");
strcat(buffer,name); // Now this is where the problem comes in. Since strcat function needs a const char* for it's second argument.

printf("%s",name);

4 个答案:

答案 0 :(得分:5)

您无需做任何事情。数组会自动衰减到指针中,因此您的代码显示正常。

在第一次调用buffer之前,您需要确保strcat()以有效的NUL终止字符串开头。它也需要是可写的(例如,它不能是指向字符串文字的指针)。

您还需要确保不会溢出buffer。我建议你研究一下strncat()

答案 1 :(得分:1)

我假设代码已经使用类似的东西声明了缓冲区:

     char buffer[100];
     char name[100];

不是您的问题的一部分,但在新代码中不使用strcat 。决不。查看strncat非常危险strncat不是(同样多)。

至于您的直接问题:您可以使用name,就好像它是char*一样。 C编译器会自动将其转换为&(name[0])的逻辑等价物。

答案 2 :(得分:1)

BTW为什么傻傻的strcat()的事情?为什么不:

sprintf(name,"%c%c%%HACKED%c%c.virus",a,b,c,d);
sprintf(buffer,"%s\\\\%s", currentPath, name );

     /* should this be printf("%s", buffer); ?? */
printf("%s",name);

而且,正如BPRcock所说:snprintf()更好。

答案 3 :(得分:1)

在C中,类型为char [N]的对象的值将转换为char *类型的值。

void *p;
char a[16] = {0}

p = a;

在表达式语句p = a;中,值a的类型为char *

  

(C99,6.3.2.1p3)“除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式的类型为”数组类型“转换为类型为“指向类型的指针”的表达式,该表达式指向数组对象的初始元素,而不是左值。“