0

该程序应该通过从它们的 ascii 值中减去 97 将字符数组(字符串)转换为整数数组(输入应该是小写,因为 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;
    }
}
4

2 回答 2

1

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

因此,您应该相应地更改声明:

改变:

 char input[n];

至:

 char input[n+1];

请注意,仅从 C99 起才允许使用可变长度数组。

于 2012-11-16T19:03:03.477 回答
1
char input[n];
scanf("%s", &input);

应该

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

input相当于&input[0]

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

char* p = input;
while (*p != '\0') {
    *pattern = (*p) - 'a';
    p++;
    pattern++;
}

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

于 2012-11-16T18:45:30.600 回答