为什么这个C程序提供随机字符串作为输出,我做错了什么

时间:2016-04-20 11:25:42

标签: c

#include<stdio.h>
#include<string.h>
void main()
{
    int i;
    char str[100];
    printf("Enter a string\n");
    scanf("%s",str);
    int ln = strlen(str);

    char str2[ln][ln];
    printf("enter string 2\n");
    for(i=1;i<=ln;i++)
    scanf("%s",str2[i]);
    printf("\n____________\n");
    for(i=ln;i>=1;i--)
    printf("%s ",str2[i]);


}

这个程序是正确的还是我错过了它的东西,它给出了错误的输出 。
输入: - 零
          Mahaveer是我的名字 预期输出: - 名字是我的mahaveer
但是输出来了: - 名字mname imanme mimname。

3 个答案:

答案 0 :(得分:1)

问题
您认为char str2[ln];是一个c字符串数组。但实际上它是char的数组,可以表现为单C-string

解决方案
其中一个解决方案是使用char的二维数组来表现为C字符串数组。

答案 1 :(得分:1)

在你的代码中:

char str2[ln];//this declares an array with size 4 characters, not 4 arrays with dynamic size
printf("enter string 2\n");
for(i=1;i<=ln;i++)//i should start from 0, better way to do, else we will be wasting the 1st byte
scanf("%s",&str2[i]);//%s in scanf expect char array in 2nd parameter, but &str2[i] indicates a character
printf("\n____________\n");
for(i=ln;i>=1;i--)
printf("%s ",&str2[i]);//%s says to print a character array, but the second parameter passed,&str2[i], is a character

尝试这样做,这将满足您的要求:

char str2[ln][20];//each sub array with 20 characters size
printf("enter string 2\n");
for(i=0;i<ln;i++)
{
    scanf("%s",str2[i]);
}
printf("\n____________\n");
for(i=ln-1;i>=0;i--)
printf("%s ",str2[i]);
printf("\n");

答案 2 :(得分:0)

试试这个

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

int main(void){
    int i, j;
    char str[100];
    char *words[50], *word;

    printf("Input :- \n");
    fgets(str, sizeof str, stdin);
    strlwr(str);//convert to lowcase

    i = 0;
    word = strtok(str, " \t\n");//split to word
    while(word){
        words[i++] = word;
        word = strtok(NULL, " \t\n");
    }
#if 0
    //swap head and tail
    if(i){
        word = words[i-1];
        words[i-1] = words[0];
        words[0] = word;
    }
    for(j = 0; j < i; ++j){
        if(j)
            putchar(' ');
        printf("%s", words[j]);
    }
#else
    //reverse word
    for(j = i-1; j >= 0; --j){
        printf("%s", words[j]);
        if(j)
            putchar(' ');
    }
#endif
    puts("");
    return 0;
}