Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读字符串,只保留字母_C_String_Pointers - Fatal编程技术网

C 读字符串,只保留字母

C 读字符串,只保留字母,c,string,pointers,C,String,Pointers,我希望用户输入一个字符串,然后只保留字母。我的问题是在第二个循环中的str函数中,它从不将字母复制到另一个字符串。它甚至不打印j!我真的不知道为什么会这样 #include <stdio.h> #include <stdlib.h> #include <string.h> void str(char *s) { int i=0,j=0; int sum=0; char *outstr; while(s[i]!='\0') {

我希望用户输入一个字符串,然后只保留字母。我的问题是在第二个循环中的str函数中,它从不将字母复制到另一个字符串。它甚至不打印j!我真的不知道为什么会这样

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

void str(char *s)
{
  int i=0,j=0;
  int sum=0;

  char *outstr;
  while(s[i]!='\0')
     {
       if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
        sum++;
      i++;
     }
   i=0;
   outstr=(char*)malloc(sum*sizeof(char));
   while(s[i]!='\0')
    {
      if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
         {
            strcpy(outstr[j],s[i]);
            j++;
            printf("\nj=%d",j);
         }

        printf("\ni=%d",i);
        i++;

    }


    printf("%s",outstr);
}

int main()
  {
     char s[650];
     int n;
     gets(s);
     str(s);

     return 0;
  }
#包括
#包括
#包括
void str(char*s)
{
int i=0,j=0;
整数和=0;
char*outsr;
而(s[i]!='\0')
{

如果(s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:

strcpy(outstr[j],s[i]);
但是

够了,还有改变

s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'

s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:

strcpy(outstr[j],s[i]);
但是

够了,还有改变

s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'

s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:

strcpy(outstr[j],s[i]);
但是

够了,还有改变

s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'

s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您不需要strcpy函数:

strcpy(outstr[j],s[i]);
但是

够了,还有改变

s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z'

s[i]>='a'和&s[i]='a'和&s[i]='a'和&s[i]='a'和&s[i]您应该尽可能使用标准的c库例程。例如,您可以使用

isalpha检查字符是否为字母。

您应该尽可能使用标准c库例程。例如,您可以使用函数
isalpha检查字符是否为字母。

您应该尽可能使用标准c库例程。例如,您可以使用函数
isalpha检查字符是否为字母。

您应该尽可能使用标准c库例程。例如,您可以使用函数
我会检查一个字符是否是字母。

并避免使用
get()
,因为如果输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。尽管您的代码中不需要
strcpy()
,但当您需要它时,最好使用他的弟弟
strncpy()
限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用
gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。而且您不需要
strcpy()
在您的代码中,当您需要它时,更喜欢使用他的小弟弟
strncpy()
来限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用
gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。虽然您的代码中不需要
strcpy()
,但当您需要它时,更愿意使用他的弟弟
strncpy()
限制复制的长度。我知道gets,但我现在想要一些快速的东西。请避免使用
gets()
,因为如果您输入651个字符,那么您将得到的只是缓冲区溢出和未定义的行为。而且您不需要
strcpy()
在您的代码中,当您需要它时,更愿意使用他的弟弟
strncpy()
来限制复制的长度。我知道gets,但我现在想要一些快速的东西。