我尝试编写一个函数,该函数接收两个字符串,连接它们,然后将它们写入2D数组。我一直在搞乱不同的事情,看其他帖子都无济于事。当我试图将连接字符串写入char数组时,seg错误似乎发生在最后一个strcpy中。如果该行被注释掉,该程序似乎工作正常。
void saveToArray(char *command1, char *command2)
{
char *saveCommands[30][100];
int *commands = malloc(sizeof(int));
char concatCommand[30];
strcpy(concatCommand, command1);
strcat(concatCommand, " ");
strcat(concatCommand, command2);
strcpy(*&saveCommands[0][*commands], concatCommand);
*commands += 1;
}
我提前为任何格式问题道歉,因为这是我的第一篇文章,感谢任何答案!
答案 0 :(得分:1)
此功能中有许多可怕的事情发生。首先......
int *commands = malloc(sizeof(int));
你不能释放它或返回它,所以它是100%的内存泄漏。我认为没有理由要在堆上而不是堆栈上分配这个整数。
char concatCommand[30];
strcpy(concatCommand, command1);
strcat(concatCommand, " ");
strcat(concatCommand, command2);
这可能会使您的缓冲区溢出。
strcpy(*&saveCommands[0][*commands], concatCommand);
*&安培;是一个无操作(它没有做任何事情)。你不能将任何东西复制到命令中,所以*命令可以是任何东西。最后,saveCommands中的指针没有被初始化,因此strcpy(saveCommands [x] [y],"某些字符串")在实践中基本上总是会出现段错误。我想你可能会想要这个:
char saveCommands[30][100]
...
strcpy(&saveCommands[0][*commands], concatCommand);
答案 1 :(得分:0)
我冒昧地重新编写了你的代码......太多的角色让我的眼睛受伤......无论如何,这段代码都有效。主要是引起这个问题的strcpy dereference。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void cmds(char *c1, char *c2) {
char sc[30][100];
int c = 0;
char cc[30];
strcpy(cc, c1);
strcat(cc, " ");
strcat(cc, c2);
strcpy(&sc[c][0], cc); // problem was here...
printf("%s\n", &sc[c][0]);
}
int main() {
char *c1 = "c001";
char *c2 = "c002";
cmds(c1, c2);
return 0;
}