【问题标题】:add in a char* some other data c code添加 char* 一些其他数据 c 代码
【发布时间】:2012-09-04 06:09:44
【问题描述】:

我在代码中有这部分:

char* data="My name is: ";

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

strcpy(data,argv[1]);

有人可以帮忙吗?

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

【问题讨论】:

标签: c nullpointerexception char strcpy


【解决方案1】:

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

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 获取详细示例。您还可以使用 strncpy/strncat 来避免缓冲区溢出。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    where in memory are string literals ? stack / heap?

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

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

    【讨论】:

      【解决方案4】:

      你不能追加到数据指针,因为里面没有空间

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

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多