【问题标题】:strcat function not working with pointersstrcat 函数不适用于指针
【发布时间】:2019-10-05 15:44:55
【问题描述】:
int main(int argc , int *argv[]){

char str[7] = "Mobile";
char str2[11] = "Samsung4g";

char *str3 = 0;
str3 = ( char* )(malloc(30));

str3 = "Carrier";

strcat(str3, str);//Problem facing here, dunno why

【问题讨论】:

  • str3 = "Carrier"; - 刚刚泄露了在该行之前分配的内存。这不是您在 C 中 复制 字符串的方式。
  • str3 = "Carrier"; -> strcpy(str3, "Carrier").
  • str3 = "Carrier"; 只是用str3 = ( char* )(malloc(30)); 覆盖了存储的地址,将地址替换为String-Literal "Carrier" 的地址,导致str3 现在指向不可变的字符串文字和内存泄漏,因为您现在无法free() 分配的内存(您丢失了指针) 无需强制转换malloc 的返回,这是不必要的。见:Do I cast the result of malloc?
  • 发布特定问题可以提高帖子的质量。像这样的帖子,毫无疑问会吸引反对票和关闭。 user1421147,考虑修改。

标签: c pointers strcat


【解决方案1】:

就像其他人在 cmets 中提到的那样,声明:

str3 = "Carrier";

用字符串文字“Carrier”的地址覆盖 str3 的值,导致 malloc() 返回的地址丢失。

在 strcat() 中使用 str3 then 作为第一个参数会尝试修改导致未定义行为的字符串文字。

使用 strcpy() 或等效函数在 C 中复制字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多