gpt4 book ai didi

c - C 中 printf 的不逻辑总线错误

转载 作者:行者123 更新时间:2023-11-30 18:19:20 27 4
gpt4 key购买 nike

当我编译并运行代码时,在打印“starting”后立即出现总线错误。发生的情况如下:

bash-3.2$ ./remDup
开始
总线错误

#include <stdio.h>
#include <string.h>

void removeDups(char* str)
{
int len = strlen(str);
int i = 0;

for (i = 0; i < len; i++) {
char a = str[i];
int k = i + 1;
int c = 0;
int j = 0;

for (j = k; j < len; j++) {
if (a != str[j]) {
str[k] = str[j];
k++;
} else c++;
}

len -= c;
}

str[len] = '\0';
}

int main(int argc, const char* argv[] )
{
char *str1 = "apple";

printf("%s -> ", str1);
removeDups(str1);
printf("%s\n ", str1);

return 1;
}

最佳答案

如果将字符串定义为:

char *str1 = "apple";

您不得修改内容 - 标准非常清楚这是未定义的行为(a)。使用:

char str1[] = "apple";

相反,它会给你一个可修改的副本。它在功能上相当于:

char str1[6]; strcpy (str1, "apple");
<小时/>

(a) C99 6.4.5“字符串文字”,第 6 段指出:

It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

关于c - C 中 printf 的不逻辑总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483795/

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