简单c任务的问题

时间:2011-12-20 11:54:36

标签: c

因此在大学学习几年后,我试图通过简单的弦乐反转器来增强我的经验。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 
*/
int main(int argc, char** argv) {
reverser();
return(0);
}

int reverser(){
printf("Please enter a String: ");
//return (0);
int len;
char input[10];
scanf("%s",&input);
int quit = strcmp(input,"quit");
if(quit == 0){
    printf("%s\n","Program quitting");
    return(0);
}



len = strlen(input);
printf("%i\n",len);

char reversed[len];

int count = 0;

while (count <= (len-1)){
    //printf("%i\n",(len-count));
 reversed[count] = input[(len-1)-count];   
 count++;
}


//printf("%s\n",input);
printf(reversed); 
printf("\n");
reverser();


}

当我输入“你好”时,你会期望“olleh”作为回应,但我得到“olleh:$ a ca&amp; @”,

如何才能将字符串输入反转并返回?

Bombalur

6 个答案:

答案 0 :(得分:3)

在数组末尾添加'\ 0'。 (例如,只复制字符,直到你达到'\ 0' - 这是数组[strlen(array)]的点,然后当你完成时,在下一个字符处添加'\ 0')

答案 1 :(得分:2)

字符串通常以零字节终止。所以它应该是

char reversed[len+1];

你应该清除最后一个字节

reversed[len] = (char)0;

答案 2 :(得分:1)

你忘记了字符串末尾的\0

答案 3 :(得分:0)

这是因为您正在创建一个大小为10的数组。当您将一些数据输入(使用scanf)并且数组未完全填满时,此数组中的printf将在内存中提供垃圾值。您应该通过检查\ n。

来迭代输入的长度

答案 4 :(得分:0)

的字符串长度必须为+ 1,这样你就可以在字符串末尾有一个\ 0来解决你的问题

答案 5 :(得分:0)

以下是字符串反向程序的(简单和最小的实现)(显然,未考虑错误条件,极角情况,空格,更宽的字符集等)。

#include <stdio.h>

int strlen(char *s)
{
    char *p = s;
    while (*p)
        p++;
    return p - s;
}

char * strrev(char a[])
{
    int i, j;
    char temp;

    for (i=0, j=strlen(a)-1 ; i<j ; i++, j--) {
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
        }

    return a;
}

int main()
{
    char str[100];

    printf("Enter string: ");
    scanf("%s", str);

    printf("The reverse is %s \n", strrev(str));

    return 0;
}

希望这有帮助!