想象一下,我在C中有一个程序给了我一个字符串。 例如,“stackoverflow rocks”。
现在我想在Assembly中创建一个函数,例如,字母“o”出现在我的字符串中的次数。
此功能将在C程序中调用。
我正在考虑在C中创建一个程序,这个程序会让我这个,然后通过标志-s将它转换为Assembly。
[编辑] 好的,我这样做了:
#include<stdio.h>
int FindChar(char *ptr, char toFind);
int FindChar(char *ptr, char toFind){
int num;
for (int i=1; ptr[i]=0; i++)
if (ptr[i] = toFind){
num++;
}
return(num);
}
int main ( ) {
char str[]=”stackoverflow rocks”;
char tf=”o”;
printf(“It appears %d times \n”, FindChar(str,tf));
}
我的功能出了什么问题?
答案 0 :(得分:1)
我认为您的备用双引号字符会导致错误,而且char tf
的初始化应该使用单引号,而不是双引号,因为它是char而不是字符串。
正如harold前面指出的那样,=
必须是==
,因此它可以作为比较正常运作。
您也不需要额外的i
变量,只需前进指针即可。
既然你不想要汇编代码,它应该缩短一点,技术上也要更高效。
此代码修复了错误,也应该在功能上合理:
#include<stdio.h>
int FindChar(char *ptr, char toFind);
int FindChar(char *ptr, char toFind){
int num = 0;
for ( ; *ptr != '\0'; ++ptr)
{
if (*ptr == toFind){
++num;
}
}
return(num);
}
int main ( ) {
char str[]="stackoverflow rocks";
char tf='o';
printf("It appears %d times \n", FindChar(str,tf));
}