English 中文(简体)
1. 舱位比较缓慢的执行
原标题:slow execution of string comparision

my problem why my program takes much large time to execute, this program is supposed to check the user password, the approach used is take password form console in to array and compare it with previously saved password comparision is done by function str_cmp()-returns zero if strings are equal,non zero if not equal

  #include<stdio.h>
  char str_cmp(char *,char *);
  int main(void)
  {
      int i=0;
      char c,cmp[10],org[10]="0123456789"; 
      printf("
Enter your account password
type 0123456789
");
      for(i=0;(c=getchar())!=EOF;i++)
      cmp[i]=c;
      if(!str_cmp(org,cmp))
      {
          printf("
Login Sucessful");  
      }
      else
          printf("
Incorrect Password");
  return 0;
  }
  char str_cmp(char *porg,char *pcmp)
  {
    int i=0,l=0;
    for(i=0;*porg+i;i++) 
    {
        if(!(*porg+i==*pcmp+i))
        {
          l++;
        }        
    }
  return l;
  }
问题回答

现有图书馆可以更简单地做这项工作,但我将认为这是一项任务,也是一次良好的学习经验。 我认为,问题在于你履行大脑功能。 你使用的条件是“*porg+i”。 这不是真正的比较。 汇编者将做些什么,直到表述等于0。 一旦如此庞大,*porg+i就会大于“int”能够储存的,而且它又被重新set到0(这称为变数的溢出)。

相反,你应当把体积与体内长度相当的体格效应功能。 就居住条件而言,你应确保“i <”; str_size。

然而,在斯特恩克林功能方面有一个建筑()。 确实如此。

你也存在不同的问题。 你正在做这样的补充:

*porg+i

这将达到阵列第一个要素的价值,并增加一。 请不要:

*(porg+i)

这将增加点数,然后将其引向点值。


更充分地澄清比较,因为这是对点人来说一个非常重要的概念。 porg被定义为char*。 这就是说,你拥有一个有色谱的变量。 如果你在变数上使用提款机(例如,<代码<*porg

C的所有条件都在检查价值为零或非零。 零意味着虚假,所有其他价值都意味着真实。 当你使用这一表述时(*porg + 1),条件是该表述将进行计算(数值在porg+1上),如果是零,则进行核对。

这导致我提出在C制定方案的另一个非常重要的概念。 暗中只能持有一定规模的数值。 如果在大于这一最高值的情况下,可变数的增加就足够了,则将循环到0。 因此,我要说的是,t的最高价值为256(事实上,它更大得多)。 如果你有价值为256美元并增加1美元,就会变成零,而不是257。 在现实中,大多数汇编者的最高人数为65 536人,因此是这么长时间的。 等待到*porg+i超过65,536,以便它再次成为零。

引言:

#include <string.h>

然后使用“strcmp(。 在大多数情况下,现有的扼杀功能已经写成尽可能快。

另外,我想到您的<代码>发言。

for(i=0;*porg+i;i++) 

之后添加<条码>i。 我感到惊讶的是,暴徒已经离开。

如果你改变这种状况,它应当努力:

for(i=0;porg[i];i++) 

你最初的举动也比你认为的更长。 你们分配了10个tes子,但实际上有11个 by。 扼杀(引文)总是无效。 你们需要宣布11个座标。

另一问题:

if(!(*porg+i==*pcmp+i))

应当改为

if(!(porg[i]==pcmp[i]))

出于上述同样原因。





相关问题
C: Accessing a pointer from outside a function

I have the following code: int takeEven(int *nums, int numelements, int *newlist) { newlist = malloc(numelements * sizeof *newlist); int i, found = 0; for(i = 0; i < numelements; ++i, ...

Scheme, getting the pointer from pointed struct

Assume I have a such struct: (define-struct node (value next)) ;and making 2 nodes, parent pointing to child as next. (define child (make-node 2 null)) (define parent (make-node 1 child)) Under ...

DO s and Donts while using pointers

Its a simple but important question. What are the do s and donts while using a pointers in C and C++ so as to make sure SEGMENTATION FAULT is avoided on AIX? Where char * are preferred over character ...

确保点名不删除

我 st卑地 something了我可以说出的东西,因此,我认为,在更大的C++图像中,我没有东西。

C#: Using pointer types as fields?

In C#, it s possible to declare a struct (or class) that has a pointer type member, like this: unsafe struct Node { public Node* NextNode; } Is it ever safe (err.. ignore for a moment that ironic ...

Data Destruction In C++

So, for class I m (constantly re-inventing the wheel) writing a bunch of standard data structures, like Linked Lists and Maps. I ve got everything working fine, sort of. Insertion and removal of ...

Question regarding de-referencing structure pointers

I am compiling this piece of code and I get compilation errors saying " dereferencing pointer to incomplete type" . I get the errors for the last print statement and before that where I try to point (...

热门标签