0

我在代码中有这一部分:

char* data="My name is: ";

我想在此添加argv[1]代表名称的参数。如何在c代码中做到这一点?我已经尝试过strcpystrcat但是当 Ipcp 执行此操作时出现分段错误:

strcpy(data,argv[1]);

有人可以帮忙吗?

还有为什么:data=data+argv[1]不工作?

4

4 回答 4

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);
}
于 2012-09-11T10:23:59.103 回答
0

data将在只读部分分配内存。所以修改会导致问题。

内存中的字符串文字在哪里?堆栈/堆?

+运算符不会像您想象的那样进行 concat 。

strcat()功能在string.h.

于 2012-09-11T10:24:31.963 回答
0

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

关于这一点 - C 中的数据和 argv 只不过是指向包含您的字符串的内存中的地址的指针。您不能以这种方式连接字符串(char*)。我建议看一下字符串库,也许更多地看一下整个 C 语言。

于 2012-09-11T10:24:44.577 回答
0

您不能附加到数据指针,因为其中没有空间

char result_data [1024];
char* data="My name is: ";
strcat(result_data, data);
strcat(result_data, argv[1]);
于 2012-09-11T10:32:06.987 回答