这个程序应该通过从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;
}
}
答案 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以来只允许使用可变长度数组。