gpt4 book ai didi

c - 尝试从 char*[] 复制所有字符串但出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:37:53 36 4
gpt4 key购买 nike

我试图弄清楚为什么在尝试将参数从一个字符串数组复制到另一个字符串数组时出现段错误,但只是忽略了 >

int main(){
char *args[] = {"sort", "myshell.c", ">", "2"};
int size = 4*sizeof(args)/sizeof(args);
char *temp[size];
int i;

printf("SIZE: %d\n", size);
for(i = 0; i < size; ++i){
if(strcmp(args[i], ">") > 0 || strcmp(args[i], ">") < 0 ){
strcpy(temp[i],args[i]);

}
printf("arg: %s\n", temp[i]);
}

最佳答案

strcpy(temp[i],args[i]); 

这是未定义的行为。 strcpy 尝试访问不确定的内存位置,导致未定义的行为。

您需要为 temp[i] 分配内存或直接使用

temp[i]=strdup(args[i])

将字符串复制到temp[i]

还有

int size = 4*sizeof(args)/sizeof(args);

将是

int size = sizeof(args)/sizeof(*args);

如果你知道数组的长度是 4 那么做这些计算有什么用呢?你需要计算它而不是这样说。

示例代码:-

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char *args[] = {"sort", "myshell.c", ">", "2"};
size_t size = sizeof(args)/sizeof(*args);
char *temp[size];
size_t len = 0;
printf("SIZE: %zu\n", size);
for(size_t i = 0; i < size; ++i){
if(strcmp(args[i], ">") != 0 ){
temp[len++] = args[i];
}
}
for(size_t i = 0; i < len; i++){
printf("arg[%zu]: %s\n", i+1, temp[i]);
}
return 0;
}

请注意,如上所述,您的比较应该简单得多。

strdup 是做什么的?

它在内部分配内存,然后使用strcpy复制目标字符串。这不是标准库的一部分,由 POSIX 实现。有关更多详细信息,请参阅此 answer .

关于c - 尝试从 char*[] 复制所有字符串但出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725798/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com