当我使用strcmp
时,似乎出现了段错误:奇怪的是,该值似乎是正确存储的,但仍会导致段错误。有人知道为什么会发生这种情况吗?以下是我的代码:
比如说,我想要取消别名的值为'xx',在for循环之后的两行代码它们都等于'xx',但接着这一行会导致段错误:if (alias_array[i].alias != NULL && strcmp(alias_array[i].alias, arguments[1]) == 0) {
typedef struct alias {
char alias[50];
char command[50];
} alias;
alias alias_array[MAX_ALIAS_LEN];
void unalias_command(char *arguments[50]) {
char alias_name[50];
strcpy(alias_name, arguments[1]);
printf("args[1] %s\n", *arguments);
printf("Len of args = %ld", strlen(arguments[1]));
//if(strcmp(alias_name, NULL) != 0) {
if (arguments != NULL) {
int found = 0;
for (int i = 1; i < MAX_ALIAS_LEN; i++) {
printf("current name = %s\n", alias_array[1].alias);
printf("current argument = %s\n", arguments[1]);
if (alias_array[i].alias != NULL && strcmp(alias_array[i].alias, arguments[1]) == 0) {
// if alias is found and matches then we can use the free() function
found = 1;
strcpy(alias_array[i].alias, NULL);
strcpy(alias_array[i].command, NULL);
break;
}
}
if (found == 1) {
printf("Alias, %s has been removed as an alias\n", arguments);
} else {
printf("No alias with name %s\n", arguments[1] );
}
} else {
printf("Error: command 'unalias' requires 1 argument"); }
}
...
char *args[50] = {""}
unalias_command(args)
alias_array [1] .alias
的值,但是strcmp
使用的是alias_array [i] .alias
(i
与1
不同)。由于您没有向我们展示alias_array
是如何声明或初始化的,因此我们只能猜测该数组包含无效的字符串数据。 - Adrian Molealias_array
?如果它是一个alias
数组,那么alias_array[i].alias != NULL
就没有意义了。请发布一个最小可复现示例,即展示错误的最短完整代码。 - Weather Vaneif( alias_array[i].alias[0] != '\0' && strcmp(alias_array[i].alias, arguments) == 0) {
,它似乎并不会出现段错误。 - tDownUnder