我想编写一个称为append()
目标的C函数,该函数将在给定字符串的末尾附加一个字符。但是,由于某些与指针相关的问题,我无法使我的代码正常工作。
#include <stdio.h>
void append(char ** string, int length, char ch)
{
printf("%s", string);
char * newString = (char *) malloc(sizeof(char)*(length+2));
strcpy(newString, string);
newString[length ] = ch;
newString[length + 1] = '\0';
strcpy(string, newString);
free(newString);
}
int main()
{
char * string = "my1name234is56";
append(string, strlen(string), 'x');
printf("%s", string);
}
在函数内部append()
:第二个strcpy()
在free()
给我一个例外,该程序显示:
Unhandled exception at 0x5E8D40D9 (msvcr120d.dll) in mips_2_1.exe:
0xC0000005: Access violation writing location 0x00D1585C.
我也尝试过
strcpy(*string, newString);
和
strcpy(**string, newString);
而且,似乎没有任何效果。
。
strcpy(&string, newString);
似乎正在工作,但是最终结果不是我期望的。
编辑:我根据alk进行了编辑。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void append(char ** string, int length, char ch)
{
printf("%s\n\n", *string);
char * newString = (char *)malloc(sizeof(char)*(length + 2));
strcpy_s(newString, length+1, *string);
newString[length] = ch;
newString[length + 1] = '\0';
strcpy_s(*string, length + 2, newString);
*string = newString;
}
int main(void)
{
char * string = "my1name234is56";
append(&string, strlen(string), 'x');
printf("%s", string);
}
它仍然无法正常工作。
Edit2:我根据“ Weather Vane ”进行了以下编辑:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char * append(const char * string, int length, char ch)
{
char * newString = (char *)malloc(sizeof(char)*(length + 5));
printf("%s\n\n", string);
strcpy_s(newString, length+5, string);
newString[length] = ch;
newString[length + 1] = '\0';
return newString;
}
int main(void)
{
char * string = "my1name234is56";
printf("%s\n\n", string);
char * string2 = append(string, strlen(string), 'x');
printf("%s", string2);
}
现在,它正在工作。
Edit3:根据alk,以下修改对我有用:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void append(char ** string, int length, char ch)
{
char * newString = (char *)malloc(sizeof(char)*(length + 2));
strcpy_s(newString, length + 1, *string);
newString[length] = ch;
newString[length + 1] = '\0';
*string = newString;
}
int main(void)
{
char * string = "my1name234is56";
printf("%s\n\n", string);
append(&string, strlen(string), 'x');
printf("%s\n\n", string);
}
你快到了。
不过,您需要将传入的指针的值更改为分配给内存的指针的值,而不是释放它。
下面仅显示已更改的行。
...
void append(char ** string, size_t length, char ch)
{
printf("%s\n", *string);
...
strcpy(newString, *string);
...
*string = newString;
}
int main(void)
{
...
append(&string, strlen(string), 'x');
...
}
顺便说一句,您不必传递源的大小,但是您可以通过执行轻松地在函数内部派生它strlen(*string)
。
对不完整的代码表示抱歉。看来,我是从坐在一个高度完整的代码泄漏检测系统后面发布答案的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句