添加一个char *一些其他数据c代码

时间:2012-09-11 10:19:39

标签: c nullpointerexception char strcpy

我在代码中有这个部分:

char* data="My name is: ";

我想在此添加argv[1]参数来表示名称。如何在c代码中执行此操作?我尝试了strcpystrcat,但是当Ipcp执行此操作时我有分段错误:

strcpy(data,argv[1]);

有人可以帮忙吗?

为什么这个:data=data+argv[1]无效?

4 个答案:

答案 0 :(得分:4)

您需要提供一些内存,其中可以存储连接的结果。例如:

char buffer[1024];

strcpy(buffer, "My name is: ");
strcat(buffer, argv[1]);

但请注意,这很容易出错:如果argv[1]的值与前缀字符串的长度超过1024个字符,则会产生缓冲区溢出。所以,也许是这样的:

char* prefix = "My name is: ";
int length = strlen(prefix) + strlen(argv[1]) + 1;
char* buffer = malloc(length);

if (!buffer) abort();
else 
{
    strcpy(buffer, prefix);
    strcat(buffer, argv[1]);

    /* Do something with buffer here. And don't
     * forget to free it, once you no longer need
     * it. This is C -- no garbage collection. */

    free(buffer);
}

答案 1 :(得分:0)

data的内存将以只读部分分配。所以修改会引起问题。

where in memory are string literals ? stack / heap?

+运算符不会按照您的想法进行连接。

strcat()函数在string.h中实现。

答案 2 :(得分:0)

另外为什么:data = data + argv [1]不起作用?

关于这一个 - 在C数据和argv只不过是在包含你的字符串的内存中寻址的指针。你不能用这种方式连接字符串(char *)。 我建议看一下字符串库,或者在整个C中可能会多一点。

答案 3 :(得分:0)

您无法附加到数据指针,因为其中没有空格

char result_data [1024];
char* data="My name is: ";
strcat(result_data, data);
strcat(result_data, argv[1]);