我只想问一个问题,如果我们有两个字符串,但这些应该在给定的代码中
#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);
}
所以,我想知道是否有其他方法来运行上面修复字符串的情况。我知道&#34;我们怎样才能在同一个字符指针中实现最终值&#34;。
请阅读注意: 有很多与此问题相关的问题我尝试了所有解决方案。 我看了下面的解决方案
concatenate-two-char-arrays-into-single-char-array-using-pointers
我通过互联网搜索了更多解决方案,但没有解决方案满足我的条件。这些解决方案都使用第三个变量并显示其值。我希望在同一个变量中有价值。即使我们创建任何额外的变量,它的值最终也应该分配给char *str
。
请以c语言向我提出任何建议。
The given question与我的问题不同,因为在那个问题中,他们检查字符串文字的行为,对于我的情况,我希望将连接值分配给变量str。它的解决方案将指针更改为数组,但我无法更改,因为它的值正在为我的工作使用许多函数。
答案 0 :(得分:2)
您的函数{=MAX(IF(AND(M21:M28=1,L21:L28="hao"),N21:N28))}
Name No Value
hao 1 10
hao 1 11
rui 2 12
rui 1 213
alvin 2 14
alvin 1 99915
hao 1 916
hao 3 9917
在其第一个参数上调用combine()
。在free()
调用中,该调用从fun()
传递,指向代码中的字符串文字。
你不能在字符串文字上调用fun()
,这是未定义的行为。我建议您重新构建代码,以便free()
不再在其第一个参数上调用combine()
。释放记忆应该是来电者的责任。
答案 1 :(得分:0)
我建议使用一对分配/释放功能:
char * combine_allocate(const char *a, const char *b) {
char* result = malloc(...)
combine ...
return result;
}
void combine_deallocate(char* p) { free(p); }
拥有:
char* a = initial_allocate();
char* b = initial_allocate();
char* c = combine_allocate(a, b);
initial_deallocate(a);
initial_deallocate(b);
// ... use c
combine_deallocate(c)
对于字符串文字,您可以省略(并且应该)initial_allocate / initial_deallocate。 它可能有点过于冗长,但面向对象的C不会做任何其他事情(具有更好的函数名称)。