字符串在C中由strchr进行部分复制

时间:2017-09-27 13:47:36

标签: c

我希望获得代码2 结果,但如果我使用代码1 ,则会产生一些奇怪的结果。

我认为数字116是t ASCII 代码。但我无法理解代码1 中发生的事情。

您能否解释一下代码1和代码2之间的区别?

代码1

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

int main(){
        char t;
        char *p = &t;
        char *s;
        int count=0;
        char test[40] = "Test String partial copy in C\n";
        s = strchr(test,'S');
        while(!isblank(*s)){
                *(p+count) = *s;
                s++;
                printf("%d\n",count);
                count++;
        }
        *(p+count) = '\0';
        printf("%s\n",p);
}
  

结果: 0 116 117 118 119 120 Sy

代码2

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

int main(){
        char *p = (char*)malloc(sizeof(char));
        char *s;
        int count=0;
        char test[40] = "Test String partial copy in C\n";
        s = strchr(test,'S');
        while(!isblank(*s)){
                *(p+count) = *s;
                s++;
                printf("%d\n",count);
                count++;
        }
        *(p+count) = '\0';
        printf("%s\n",p);
}
  

结果:0 1 2 3 4 5字符串

0 个答案:

没有答案