问题非常简单。如何在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);
答案 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)
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运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式的类型为”数组类型“转换为类型为“指向类型的指针”的表达式,该表达式指向数组对象的初始元素,而不是左值。“