[c/c++] programming之路(29)、階段答疑

 1、指針不等於地址

指針不只有地址,還有類型,是一個存儲了地址的變量,能夠改變指向;而地址是一個常量數組

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

void main() {
    int num=10;
    int data=20;
    printf("num=%d,&num=%p\ndata=%d,&data=%p\n",num,&num,data,&data);
    
    //用鍵盤初始化一個指針:初始化一個數據須要數據的地址,初始化一個指針須要指針的地址
    int *p;
    scanf("%p",&p);//輸入num的地址後,p=&num
    *p=5;

    int *pp;
    int pdata;
    scanf("%p",&pdata);//輸入data的地址後,pdata=&data
    pp=(int *)pdata;//把整數轉換成指針
    *pp=11;

    printf("num=%d,&num=%p\ndata=%d,&data=%p\n",num,&num,data,&data);

    system("pause");
}

2、指針和字符串數組的區別

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

void main() {
    char *p="abcdefg";//p是一個指針,存儲了常量字符串的地址
    char str[10]="abcdefg";//str是數組,接受了常量字符串的賦值
    printf("%s,%s\n",p,str);
    printf("%d,%d\n",sizeof(p),sizeof(str));
    //*p='A';//常量不可修改
    str[0]='A';
    printf("%s,%s\n",p,str);//數組是變量,能夠修改

    system("pause");
}

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//c語言頭文件,無string類

void main0() {
    char str[20]="hello,yincheng ok";
    char ch='o';
    char *p=str;
    while (*p!='\0')
    {
        if(*p==ch){
            char *p1=p;
            char *p2=p+1;
        }

    }
    printf("%s\n",p);

    system("pause");
}

 3、刪除字符及字符串

1.刪除字符spa

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//c語言頭文件,無string類

void main() {
    char str[20]="hello,yincheng ok";
    char ch='o';
    char *p=str;
    while (*p!='\0')
    {
        if(*p==ch){
            char *p1=p;
            char *p2=p+1;
            while (*p2!='\0')
            {
                *p1=*p2;//字符串向前移動
                p1++;
                p2++;
            }
            *p1='\0';//填充結束符
        }
        p++;
    }
    printf("%s\n",str);

    system("pause");
}

2.刪除字符串3d

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>//c語言頭文件,無string類
 4 
 5 void main() {
 6     char allstr[100]="123456789,hello yincheng, hello c,hello cpp,hello itcast";
 7     char str[10]="hello";
 8     char *p;
 9     while ((p=strstr(allstr,str))!=NULL)//能找到字符串就繼續,不然退出循環
10     {
11         int length=strlen(str);//獲取要刪除字符串的長度
12         char *p1=p;//獲取當前位置
13         char *p2=p+length;//獲取要刪除字符串的後繼位置
14         while (*p2!='\0')
15         {
16             *p1=*p2;//根據指針進行字符串拷貝
17             p1++;
18             p2++;
19         }
20         *p1='\0';
21         //一輪循環消滅一個str:代碼到此返回第9行,對strstr(allstr,str)進行判斷
22     }
23     printf("%s\n",allstr);
24 
25     system("pause");
26 }

4、檢索進程裏是否有QQ

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

void execmd(char *cmd,char *result){
    char buffer[128]={0};//定義一個字符串緩衝區
    FILE *pipe=_popen(cmd,"r");//建立一個管道,執行指令,把管道當作文件來處理。r就是把文件按照讀的方式來操做
    if(pipe==NULL){
        printf("運行失敗");
        return;
    }else{
        while (!feof(pipe))//判斷是否到了文件末尾,沒到就繼續。feof到了末尾返回非0,不然返回0
        {
            if (fgets(buffer,128,pipe))//讀取文件到緩衝區
                strcat(result,buffer);//鏈接字符串,將結果保存到result
        }
        _pclose(pipe);//關閉管道
        return;
    }
}

void main() {
    char output[8096]={0};//定義一個字符串,接收輸出。必須足夠大,不然會溢出
    execmd("tasklist",output);//執行指令,將結果保存到output
    printf("%s\n",output);
    if(strstr(output,"QQ.exe")==NULL)
        printf("QQ未運行\n");
    else
        printf("QQ已運行\n");
    system("pause");
}

 5、實現memcpy

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

void *my_memcpy(void *dst,const void *src,unsigned int Size){
    char *tmp=(char *)dst;
    const char *s=(char *)src;
    while(Size--)
        *tmp++=*s++;//進行拷貝,++讓指針向前移動
    return dst;
}

void main() {
    char strA[20]="*****************";
    char strB[20]="123456789987654321";
    //memcpy(strA,strB,9);
    my_memcpy(strA,strB,9);
    printf("%s\n",strA);
    system("pause");
}

相關文章
相關標籤/搜索