我在代码中有这个部分:
char* data="My name is: ";
我想在此添加argv[1]
参数来表示名称。如何在c代码中执行此操作?我尝试了strcpy
和strcat
,但是当Ipcp执行此操作时我有分段错误:
strcpy(data,argv[1]);
有人可以帮忙吗?
为什么这个:data=data+argv[1]
无效?
答案 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]);