-3

这肯定很简单,但我是 C 的新手,我不明白为什么下面的代码有问题。该代码是字符串的简单还原字符位置:

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

int main()
{   int i,length;
    char *word;
    scanf("%s",word);
    length = strlen(word);
    char res[length];

    for(i=0;i<length;i++){
        res[i]=word[length-1-i];
        printf("%d",res[i]);}
}

当我输入一个字符串时,我在控制台和调试器中收到一条消息: (lldb) : movb %al, (%rcx), EXC_BAD_ACCESS(code=1,address=0x0)

4

2 回答 2

5
char *word;
scanf("%s",word);

对不存在的内存位置的无效写入。

像这样创建一个数组:char word[MAXSIZE]或使用mallocorcalloc动态分配内存。并且fgets不使用scanf

一些让你快乐的链接: malloccallocfgets

于 2012-10-17T16:54:32.250 回答
1
printf("%d",res[i]);

如果您想输出字符而不是字节值,请使用%c而不是。%d

于 2012-10-17T16:58:49.540 回答