如何解决将一个指针的值复制到另一个指针
我想将存储在char *command
中的值复制到char *command_copy
,因为我正在command
上执行令牌化,但仍想使用初始命令(这就是为什么正在创建副本)。问题在于,每次尝试尝试时,整个程序都会发疯,而且我根本找不到从哪里开始或该怎么做。
这是我的代码:
int main(void)
{
init_ui();
hist_init(100);
char *command;
while (true) {
signal(SIGINT,SIG_IGN);
command = read_command();
if (command == NULL) {
break;
}
char *command_copy;
command_copy = (char *) malloc(1000);
memcpy(command_copy,command,sizeof(*command));
char *args[4096];
int tokens = 0;
char *next_tok = command;
char *curr_tok;
while((curr_tok = next_token(&next_tok," \t\n\r")) != NULL) {
if(strncmp(curr_tok,"#",1) == 0){
break;
}
args[tokens++] = curr_tok;
}
args[tokens] = NULL;
if(args[0] == NULL) {
continue;
}
hist_add(command);
int builtin_status = handle_builtins(tokens,args);
if(builtin_status == 0) {
continue;
}
pid_t child = fork();
if(child == -1){
perror("fork");
}
...
我希望hist_add()
函数采用command_copy
而不是command
,因为此时代码中的command
只是整个初始命令的第一个字,我希望hist_add()
拥有整个(原始)命令。
read_command(void):
char *read_command(void)
{
if(scripting == true) {
ssize_t read_sz = getline(&line,&line_sz,stdin);
if(read_sz == -1){
perror("getline");
free(line);
return NULL;
}
line[read_sz - 1] = '\0';
return line;
}
else {
return readline(prompt_line());
}
}
解决方法
要复制char*
字符串-只要该字符串正确nul
终止-您可以使用strdup
function。本质上,这是malloc
和strcpy
的组合。
因此,您可以使用以下内容:
while (looping) {
char* original = getstring();
char* copy = strdup(original);
// ...
// do whatever you want with "original" - "copy" is left alone!
//
free(copy); // When you're done,free the copy
}
strdup
调用等效于以下内容:
char* copy = malloc(strlen(original) + 1);
strcpy(copy,original);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。