字符指针和空间搜索

时间:2014-10-12 13:44:39

标签: c pointers char

我有一个非常简单的实验室任务,我需要做的就是将字符串打印两次,除非它是一个空格。

由于某种原因,我似乎无法弄清楚," echoString"函数循环无穷大。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(){

char* rhyme1 = "Hey Diddle diddle the Cat and the fiddle";
char rhyme2[265];
strncpy (rhyme2, "The Cow Jumped Over The Moon", sizeof(rhyme2));
char wordList[8][100];

/*Q1: Length of the string rhyme?*/
printf("Length: %d", strlen(rhyme1) );

/*Q2: Print out each letter twice, except for the spaces*/
echoString(rhyme1);

}

void echoString ( char* pString ) {

while ( *pString != '\0' ) {

    if ( !isspace( *pString ) ) {
        printf("%s%s", *pString, *pString);
    }
    else {
        printf("%s", *pString);
    }
    pString++;
}
}

我感觉它与我如何递增指针或isspace函数有关。

感谢您的时间。

编辑:更改&#39; / 0&#39;到&#39; \ 0&#39;。没有看到这一点,感到愚蠢。

2 个答案:

答案 0 :(得分:1)

  1. \0 用于以空值终止的字符,而不是/0。将'/0'更改为'\0'

  2. 使用 %c 打印char,而不是%s,而不是string。将所有%s更改为%c

答案 1 :(得分:0)

while ( *pString != '/0' )  

错误,因为\0是空字符而非/0。所以将其更改为

while ( *pString != '\0' ) {

然后,

printf("%s%s", *pString, *pString);

也是错误的,因为你想要每个角色两次。更改为

printf("%c%c", *pString, *pString);

做同样的事情
printf("%s", *pString);

所以,你的程序应该是这样的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>   //for strlen
#include <ctype.h>

void echoString(char*); //function prototype
int main(){

char* rhyme1 = "Hey Diddle diddle the Cat and the fiddle";
char rhyme2[265];
strncpy (rhyme2, "The Cow Jumped Over The Moon", sizeof(rhyme2));
char wordList[8][100];

/*Q1: Length of the string rhyme?*/
printf("Length: %d\n", strlen(rhyme1) );

/*Q2: Print out each letter twice, except for the spaces*/
echoString(rhyme1);
return 0;   
}

void echoString ( char* pString ) {

while ( *pString != '\0' ) {                 //\0 is NULL not /0

    if ( !isspace( *pString ) ) {
        printf("%c%c", *pString, *pString);  //%c for a character
    }
    else {
        printf("%c", *pString);              //%c for a character
    }
    pString++;
}
}