Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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_Pointers - Fatal编程技术网

C 有人能帮我处理这个代码吗?

C 有人能帮我处理这个代码吗?,c,pointers,C,Pointers,我认为我的逻辑是正确的,但它没有打印任何东西。代码是从字符串中删除元音,然后显示它 #include<stdio.h> #include<conio.h> void main() { char *str="shivank"; int i,len; char *q; clrscr(); len=strlen(str); for(i=0;i<=len;i++) { if((*st

我认为我的逻辑是正确的,但它没有打印任何东西。代码是从字符串中删除元音,然后显示它

 #include<stdio.h>
 #include<conio.h> 
 void main()
  { 
   char *str="shivank"; 
   int i,len;
   char *q; 
   clrscr();  
   len=strlen(str);
    for(i=0;i<=len;i++)
     {   
        if((*str=='a')||(*str=='e')||(*str=='i')||(*str=='o')||(*str=='u')) 
           str++;     
        else if(*str=='\0')       
            break;   
        else   
          {      
            *q=*str;  
             str++;
             q++; 
          }
     }
     *q='\0';
     puts(q);  
     getch(); 
   } 
#包括
#包括
void main()
{ 
char*str=“shivank”;
int i,len;
char*q;
clrsc();
len=strlen(str);
对于(i=0;i试试这个

else   
      {      
        *q=*str;  
         puts(q);
         str++;
         q++; 
      }
 }
 *q='\0';

如果我理解正确,您希望将
“shivank”
转换为
“shvnk”
,并将其存储在单独的字符串中,以便以后打印

你必须把这个内存分配到某个地方。仅仅使用指针是不行的-最好的情况下,你可以将
str
更改为指向字符串的另一个开头:
“hivank”
“ivank”
“vank”
等等。这些都可以只使用指针算法得到,但仅此而已

我建议您使用
char
数组,而不是使用字符串常量:

char str[] = "shivank";
char modified_str[10]; // enough memory to store the modified string
使用数组的优点是,您可以像下面的示例那样修改它们:

modified_str[0] = str[0];
(这只是一个将
str
的第一个字母复制到
modified_str
的第一个字母的示例。)


然后你可以一个接一个地读你的
str
字符串的字符,只把非元音字母复制到
modified\u str
。别忘了用“\0”结束你的
modified\u str

请阅读页面上有提出有效问题的提示。你需要分配q,使它指向一些内存。
void main()
错误,
main
应返回
int
clrsc()
getch()
不是C语言的一部分。C没有在访问时自动增大大小的神奇字符串,因此
q
不是其中之一。始终为编译器启用最高级别的警告,并将其视为错误。
q
从未被分配/初始化。因此
*q
正在尝试取消引用n未知值。
q
需要赋值。为什么这样更好?因为它在您检查字符串时打印q。您的原始代码只打印q一次,而您编写代码的方式是,您需要在检查字符串时打印q。尝试一下。我相信它会起作用。
q
从未被赋值/初始化。
*q
是UB.
put(q);
已经太晚了,无法提供任何帮助。除非
q
有一个有效值,
put(q);
本身也是UB。是的,我得到了它puts(q)将从“/0”打印。这就是它不打印任何内容的原因。应该有另一个指针指向q的开头。