嘿所有, 我的问题是,如何将两个C风格的字符串附加到一个?
由于C ++的做事方式(std :: string),我从未接触过C风格的字符串,需要为我当前的开发项目了解更多。例如:
char[] filename = "picture.png";
char[] directory = "/rd/";
//how would I "add" together directory and filename into one char[]?
提前致谢。
答案 0 :(得分:3)
使用strcat()
。
见这里:http://www.cplusplus.com/reference/clibrary/cstring/strcat/
答案 1 :(得分:0)
#include <stdlib.h> #include <string.h> // ... char * fullpath; fullpath = malloc(strlen(directory)+strlen(filename)+1); if (fullpath == NULL) { // memory allocation failure } strcpy(fullpath, directory); strcat(fullpath, filename);
答案 2 :(得分:0)
你需要一个足够大的缓冲区,假设你在编译时没有filename
和directory
的大小,你必须在运行时获得,就像这样
char *buf = (char *) malloc (strlen (filename) + strlen (directory) + 1);
if (!buf) { /* no memory, typically */ }
strcpy (buf, filename);
strcat (buf, directory);
答案 3 :(得分:0)
请记住,您的工作级别较低,并且不会自动为您分配内存。你必须分配足够的内存来保存两个字符串加上一个空终止符,然后将它们复制到位。
答案 4 :(得分:0)
请务必声明/分配一个足够大的char
数组,以容纳filename
和directory
。然后,使用strcat()
(或strncat()
)作为xxpor建议。
答案 5 :(得分:0)
你必须考虑你的“字符串”实际上是如何在内存中表示的。在C中,字符串是由0字节终止的已分配存储器的缓冲区。
filename |p|i|c|t|u|r|e|0|
directory |/|r|d|/|0|
您需要的是一个新的内存空间,用于将两个字符串的内存内容复制到最后的0字节。
path |p|i|c|t|u|r|e|/|r|d|/|0|
这给出了这段代码:
int lenFilename = strlen(filename); // 7
int lenDirectory = strlen(directory); // 4
int lenPath = lenFilename + lenDirectory; // 11 I can count
char* path = malloc(lenPath + 1);
memcpy(path, filename, lenFilename);
memcpy(path + lenFilename, directory, lenDirectory);
path[lenPath] = 0; // Never EVER forget the terminating 0 !
...
free(path); // You should not forget to free allocated memory when you are done
(此代码中可能有一个1分之一的错误,实际上没有经过测试......现在是01:00,我应该去睡觉了!)