我只想问一个问题,如果我们有两个字符串,但它们应该在给定的代码中
#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);
}
所以,我想知道是否还有其他方法可以运行上述字符串固定的情况。我知道“我们怎样才能在同一个字符指针中获得最终值”。
请阅读注意: 有很多与此问题相关的问题我已经尝试了所有解决方案。 我看了下面的解决方案
我在互联网上搜索了更多解决方案,但没有满足我条件的解决方案。这些所有的解决方案都是使用第三个变量并显示它的值。我想要同一个变量中的值。即使我们正在创建任何额外的变量,它的值最终也应该分配给 char *str
。
请向我提供仅使用 C 语言执行此操作的任何建议。
The given question与我的问题不同,因为在那个问题中,他们针对我的情况检查字符串文字的行为,我希望将连接值分配给变量 str。它的解决方案更改了指向数组的指针,但我无法更改,因为它的值在我的工作中使用了许多函数。
最佳答案
您的函数 combine()
在其第一个参数上调用 free()
。在您的 fun()
调用中,它是从 fun()
传递的,它指向您代码中的字符串文字。
您不能在字符串文字上调用 free()
,这是未定义的行为。我建议您重构您的代码,以便 combine()
不再在其第一个参数上调用 free()
。释放内存应该是调用者的责任。
关于c - 无法连接两个 char * 指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087859/