c - 无法连接两个 char * 指针值?

标签 c arrays string pointers

我只想问一个问题,如果我们有两个字符串,但它们应该在给定的代码中

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

char *getln()
{
    char *line = NULL, *tmp = NULL;
    size_t size = 0, index = 0;
    int ch = EOF;

    while (ch) {
        ch = getc(stdin);
        if (ch == EOF || ch == '\n')
            ch = 0;
        if (size <= index) {
            size += index;
            tmp = realloc(line, size);
            if (!tmp) {
                free(line);
                line = NULL;
                break;
            }
            line = tmp;
        }
        line[index++] = ch;
    }

    return line;
}
char * combine(char *a,char *buffer){
   int stop_var;
   int newSize = strlen(a)  + strlen(buffer) + 1; 
   char * newBuffer = (char *)malloc(newSize);
   strcpy(newBuffer,a);
   strcat(newBuffer,buffer); // or strncat
   //printf("Final String %s",newBuffer);
   free(a);
   a = newBuffer;
   return newBuffer;
}
char * fun(char *str)
{
    char *str1;
    str1=getln();
    str=combine(str,str1);
    return str;
}
int main(void)
{
    char *str;
    str= getln();
    printf("Initial String %s \n",str);
    str=fun(str);
    printf("Final String %s \n",str);
}

此代码工作正常,但字符串 char *str="Fixed value" 是固定的,会产生运行时错误

int main(void)
{
    char *str;
    str= "Fixed Value";
    printf("Initial String %s \n",str);
    str=fun(str);
    printf("Final String %s \n",str);
} 

所以,我想知道是否还有其他方法可以运行上述字符串固定的情况。我知道“我们怎样才能在同一个字符指针中获得最终值”。

请阅读注意: 有很多与此问题相关的问题我已经尝试了所有解决方案。 我看了下面的解决方案

  1. concatenate-two-char-arrays-into-single-char-array-using-pointers

  2. concatenate-two-char-arrays

  3. how-to-concatenate-pointer-arrays

  4. concatenate-char-array-in-c

  5. concatenate-two-arrays-using-void-pointer-c

我在互联网上搜索了更多解决方案,但没有满足我条件的解决方案。这些所有的解决方案都是使用第三个变量并显示它的值。我想要同一个变量中的值。即使我们正在创建任何额外的变量,它的值最终也应该分配给 char *str

请向我提供仅使用 C 语言执行此操作的任何建议。

The given question与我的问题不同,因为在那个问题中,他们针对我的情况检查字符串文字的行为,我希望将连接值分配给变量 str。它的解决方案更改了指向数组的指针,但我无法更改,因为它的值在我的工作中使用了许多函数。

最佳答案

您的函数 combine() 在其第一个参数上调用 free()。在您的 fun() 调用中,它是从 fun() 传递的,它指向您代码中的字符串文字。

您不能在字符串文字上调用 free(),这是未定义的行为。我建议您重构您的代码,以便 combine() 不再在其第一个参数上调用 free()。释放内存应该是调用者的责任。

关于c - 无法连接两个 char * 指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087859/

相关文章:

c - 程序的执行顺序

c++ - IplImage 与 CvMat

c - malloc() 在 free() 之后重用内存位置,导致碎片化(?)

PHP JSON 数组 - 按相同值分组

java - 从字符串中删除字符

c - 文件管理中的 Powershell 循环

arrays - 在逻辑应用中拆分 HTTP 正文字符串时出现问题

objective-c - 初始化 'Method *' C 时不兼容的指针类型

r - 将字符串部分提取到 R 中的列

java - switch 语句中的 String 如何比相应的 if-else 语句更有效?