gpt4 book ai didi

C语言,字符数组已损坏(?)

转载 作者:行者123 更新时间:2023-11-30 16:13:25 26 4
gpt4 key购买 nike

我没有对“org”字符数组执行任何操作,但是当我看到输出时。“org”数组从“banana”更改为“bana”。我猜这是由内存损坏或其他原因引起的,但我不知道到底出了什么问题。如何修复 org char 数组的内容?

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

char org[];
int N;
char clue[1010][110];
int arrest[1010];

void solve(){ // Core function
char* copy;
int len_org, len_clue, tmp=0, cnt=0;
int i, j;

len_org = strlen(org);
//printf("len_org = %d\n", len_org);

for(i=0; i<N; i++){
//copy = org;
//memset(copy, 0, strlen(len_org));
//printf("org = %s\n", org);
copy = org;
cnt = 0;
printf("first copy = %s, org = %s\n", copy, org);
len_clue = strlen(clue[i]);
printf("len_clue = %d\n", len_clue);
tmp = len_org - len_clue;
for(j=0; j<=tmp; j++){
printf("clue[i] = %s, copy = %s\n", clue[i], copy);
if(!strncmp(copy, clue[i], len_clue)){
cnt++;
printf("cnt = %d\n", cnt);
}
copy++;
printf("copy = %s, org = %s\n", copy, org);
}
printf("final cnt = %d\n\n", cnt);
arrest[i] = cnt;
}

/*for(i=0; i<N; i++)
printf("%s\n", clue[i]);*/
}

void inputData(){
int i;
scanf("%s", org);
scanf("%d", &N);
for(i=0; i<N; i++){
scanf("%s", clue[i]);
}
}

int main() {
inputData();
solve();
return 0;
}

最佳答案

用gcc(7.3)编译代码找出问题:

cc a.c
a.c:4:6: warning: array ‘org1’ assumed to have one element
char org1[];
^~~~

实际上(gcc 7.3)“org”位于“clue”和“arrset”(全局)变量之间。从 'nm a.out' 可以看出 - 捕获在 org 之后的 4 个字节处开始,使得 'org' 的有效大小为 4。

输出:nm a.out |排序

0000000000201040 B N
0000000000201060 B clue
000000000021c25c B org
000000000021c260 B arrest
000000000021d228 B _end

关于C语言,字符数组已损坏(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047839/

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