繁体   English   中英

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

[英]C language, char array is corrupted(?)

我没有对“org”字符数组做任何事情,但是当我看到 output 时。 'org' 数组从香蕉更改为香蕉。 我猜这是由 memory 损坏或其他原因引起的,但我不知道到底出了什么问题。 如何修复 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。

Output 来自:nm a.out | 种类

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM