【发布时间】:2016-01-10 07:54:49
【问题描述】:
我想问一个问题,如果我们有两个字符串,但它们应该在给定的代码中
#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 与我的问题不同,因为在那个问题中,他们检查了我的情况下字符串文字 bu 的行为,我希望将连接值分配给变量 str。它的解决方案更改了指向数组的指针,但我无法更改,因为它的值在我的工作中使用了许多函数。
【问题讨论】:
-
strcat()实际上有什么问题? -
@NathanOliver 为什么这是重复的?这与修改字符串文字没有直接关系(只是间接地,通过
free())。 -
而且您已经广泛使用 realloc,那么为什么还要使用 combine 呢?只需获取您的输入字符串,重新分配第一个足够大以适合两者,然后将 strcat 放入其中...
-
如果我从组合函数中删除了“free()”,那么代码会引发分段错误。如果有任何其他直接或间接修改文字的方式,请建议我。
-
@KrishnasaiGudavalli 您不能修改字符串文字。没有办法做到这一点。如果你想要一些可写的东西,你可以创建一个数组并用字符串初始化它。