将char数组转换为int数组的函数不起作用吗?

时间:2012-11-16 18:43:57

标签: c

这个程序应该通过从ascii值中减去97来将字符数组(字符串)转换为int数组(输入应该是小写,因为a的ascii值为97)。因此,如果我输入字符串abcd我应该得到0123但我不知何故得到这个:012134513789。我无法弄清问题在哪里。

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

void userEnter(int*pattern, int n);



int main(void)
{
int n, i;
printf("What is the length of the array: ");
scanf("%d",&n);
int pattern[n];
printf("Enter the char array: ");
userEnter(pattern, n);
printf("The int array is: ");
for(i=0;i<n;i++)
{
printf("%d",pattern[i]);
}
printf("\n");

}

void userEnter(int*pattern, int n)
{
    char input[n];
    scanf("%s", input);

    int i;
    for(i = 0; i < n-1; i++)
    {
        pattern[i] = input[i]-97;
    }
}

2 个答案:

答案 0 :(得分:1)

char input[n];
scanf("%s", &input);

应该是

char input[n+1];
scanf("%s", input);

input相当于&input[0]

当遇到结束用户输入字符串的nul字符时,您还应该在userEnter中退出for循环。例如像

这样的东西
char* p = input;
while (*p != '\0') {
    *pattern = (*p) - 'a';
    p++;
    pattern++;
}

正如KingsIndian指出的那样,你还需要增加input缓冲区的大小。目前,您溢出该缓冲区并覆盖循环计数器i;

答案 1 :(得分:1)

长度参数n也包含一个null字符。因此,如果您输入n 4的长度,那么您只能输入3个字符,例如abc,因为第4个字符是空值。

所以你应该相应地更改声明:

变化:

 char input[n];

为:

 char input[n+1];

请注意,自C99以来只允许使用可变长度数组。