c - Sizeof 返回不正确的数组长度

标签 c arrays pointers sizeof rot13

<分区>

Possible Duplicate:
Sizeof an array in the C programming language?

我一直在摆弄 C 以更好地熟悉它,并且认为我可能偶然发现了一个我不确定如何解决的初始化/指针问题。下面的程序是 ROT13 的一个实现,所以它接受一个输入字符串,并将每个字母移动 13,从而得到密文。我的程序的输出显示了正确的类次,但它不能用于超过 4 个字符,这让我怀疑 sizeof 是否使用不正确。感谢任何其他建议,我敢肯定我现在搞砸了一些事情。

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

void encrypt(char *);

int main(void){

    char input[] = "fascs";
    encrypt(input);

    return 0;
}

void encrypt(char *input){

    char alphabet[] = "abcdefghijklmnopqrstuvwxyz";

    printf("Input: %s \n", input);

    int inputCount = sizeof(input);

    printf("Characters in Input: %i \n\n", inputCount);

    //holds encrypted text
    char encryptedOutput[inputCount];

    //Initialize counters
    int i, j = 0;

    // loop through alphabet array, if input=current letter, shift 13 mod(26),
    // push result to output array, encryptedOutput
    for(i = 0; i < inputCount; i++){
        for(j = 0; j < 26; j++){
            if(input[i] == alphabet[j]){
                encryptedOutput[i] = alphabet[(j + 13) % 26];
            }
        }
    }

    //Nul Termination for printing purposes
    encryptedOutput[i] = '\0';

    printf("Rot 13: %s \n\n", encryptedOutput);

}

最佳答案

encrypt 中的

sizeof() 不会按您希望的方式运行。在 encrypt 中,sizeof(char *)4(在 32 位机器上)或 8(在64位机),可以看到是一个指针的大小。

要获得 sizeof(input),您必须将 sizeof 更改为 strlen。因此 solution = strlen(input)

为什么会这样??当您将数组传递给函数时,该数组在内部表示为指针。在被调用函数的末尾 input只是一个指针,它根据您的需要给出 48 字节大小机器。

要获取 inputsizeof,只需使用如下宏: #define SIZEOF(x) (sizeof(x)/sizeof(x[0])) 并在定义 x 的函数中使用它。在您的程序中,xmain()

中的 input

关于c - Sizeof 返回不正确的数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081682/

相关文章:

iOS应用程序: incompatible pointer types

通过 memcpy 复制数组

c++ - 包装和使用返回带有 SWIG 结构的函数的问题(python)

圆形阵列人口

c - 10 个线程使用共享变量

c - 将数据放入 .text 时会出现汇编器警告和 gcc 警告

java - 使用两个值 x 和 y 对 java 中的数组进行自定义排序

c - 使用动态数组按字典顺序对输入进行排序

ios - Swift 将数组中的所有元素加在一起

javascript - 查找数组中交换的值