奇怪的字符串输出

时间:2017-09-12 21:00:27

标签: c string undefined-behavior

我正在学习C,我不理解在调用函数ayInFrontOfConsonant()和replaceChars()之后打印字符串myString时得到的输出。此练习阶段的目标是用户可以输入字符串。然后应该像这样打印字符串:所有小写元音应该用字母'a'替换,并且在每个单词前面以辅音开头,应该添加字母“ay”。当我输入字符串“我喜欢写C代码”时,输出应该是:“我aylaka aywrating ayC aycada”。我得到这个输出但是在这个字符串的末尾我得到了一些奇怪的符号。它就像是字符串的72个字符,其中一些字符在内存中是随机的。

我非常感谢您提供的任何帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void insertChar(char *str, char aChar, int index)
{
    int i=0;
    for(i=strlen(str);i>=index;i--)          //sizeof of strlen???
    {
        str[i]=str[i-1];
    }
    str[index]=aChar;
}


void ayInFrontOfConsonant(char *str)
{
    char *consonants="bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
    int i=0,j=0;
    for ( i = 0;i<strlen(str) ; i++)                 
    {
        for ( j = 0; j < strlen(consonants); j++)
        {
            if (str[i] == consonants[j] && i==0)       
            {
                insertChar(str, 'y', i);
                insertChar(str,'a',i);
                break;
            }
            else if(i!=0 && str[i-1]==' ' && str[i] == consonants[j])    
            {
                printf("i=%d\n",i);
                insertChar(str, 'y', i);
                insertChar(str,'a',i);
                break;
            }
        }
    }
}

int replaceChars(char str[], char sChar[], char rChar)
{
    int cnt=0,i=0,j=0;
    for(i=0;i<strlen(str);i++)
    {
        for(j=0;j<strlen(sChar);j++)
        {
            if(str[i]==sChar[j])
            {
                str[i]=rChar;
                cnt++;
            }
        }
    }
    return cnt;
}


int main()
{
    printf("** Welcome to the Double Dutch game **\n");
    char myString[72];
    printf("Please enter a string: ");
    scanf("%[^\n]s", myString);
    replaceChars(myString, "eiou", 'a');
    ayInFrontOfConsonant(myString);
    printf("Double dutch traslation: %s\n",myString);

    return 0;
}

0 个答案:

没有答案