getpass()函數可以使輸入的字符不現實在屏幕上。#include
創新互聯是一家專業從事做網站、成都網站制作的網絡公司。作為專業網站制作公司,創新互聯依托的技術實力、以及多年的網站運營經驗,為您提供專業的成都網站建設、營銷型網站及網站設計開發服務!
conio.hint
main(void){char
*password;password
=
getpass("Input
a
password:");cprintf("The
password
is:
%s\r\n",password);return
0;}
程序的大體思路可以是這樣:
str1是原字符串,str2是待插入的字符串,position是待插入的位置,我們可以這樣,用一個指針p_cur指向字符串1 str1中的待插入位置position,另一個指針p_end指向字符串1 str1的尾部,每次插入字符前,把str1中從當前位置開始一直到結束字符全部后移一個位置,空出當前位置,然后把要插入的字符放進這個位置,這樣就完成了一個字符的插入,重復這個步驟,直到str2被完全插入。
代碼如下:
#include stdio.h
#include string.h
void insert_str(char str1[],char str2[],int position)
{
/*
insert_str()函數
功能:將字符串str2插入到str1的position位置處
參數:char str1,char str2 ,int position
返回值:無
*/
int i;
char *p_end,*p_cur,*p;/*p_end指向第一個字符串的尾部,p_cur指向被插入的位置*/
p_end=str1+strlen(str1)-1;
p_cur=str1+position-1;
for(i=0;str2[i]!='\0';i++)
{
for(p=p_end;p=p_cur;p--)
{
*(p+1)=*p;/*從p_cur到p_end的全部元素后移一個位置,此時p_cur指向的位置就空出來了*/
}
*p_cur=str2[i];/*把字符串2中的字符插入空出來的位置*/
p_cur++;/*p_cur下移一個位置*/
p_end++;/*多了一個字符,因此p_end也下移一個位置*/
}
}
void main()
{
char s1[100],s2[20];
int position;
printf("輸入字符串1:\n");
gets(s1);
printf("輸入插入位置:");
do
{
scanf("%d",position);
while(getchar()!='\n');/*這一句可以把輸入position的時候輸入的回車去掉*/
}while(position0||positionstrlen(s1));
printf("輸入字符串2:\n");
gets(s2);
insert_str(s1,s2,position);
printf("字符串被插入后變成:\n");
puts(s1);
}
#includestdio.h#includestring.hchar *start(char *wz);int main(){ char *sys = NULL; char xz,wz[99]="www"; scanf("%s",xz); if (xz=='1') sys=start(wz);/*將wz值傳入start*/ printf("%s",sys);
if (sys != NULL) // 注意:分配內存以后一定要釋放
free(sys); return 0;}char *start(char *wz){
char* str = (char*)malloc(99); // 堆中分配內存
strcpy(str, "am start -a android.intent.action.VIEW -d http://"); strcat(str,wz); return str; }
其實不建議以這種方式來寫,start函數可以寫成2元函數,一個函數傳入參數,一個函數傳出結果。
void start(char* pOut, char* pIn)
{
strcpy(pOut, "am start -a android.intent.action.VIEW -d http://");strcat(pOut, pIn);
}
1、值傳遞
void swap(int x,int y)
{ ? ?int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
}
執行后,并不會交換。
2、引用傳遞
void swap(int x,int y)
{ ? ?int temp = x;
x = y;
y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
printf("a=%d\nb=%d\n", a, b);
}
執行后,發生交換。
3、指針傳遞
void swap(int *x,int *y)
{ ? ?int temp = *x; ? ?*x = *y; ? ?*y = temp;
}void main()
{
int a = 10, b = 20;
swap(a, b);
printf("a=%d\nb=%d\n", a, b);
}
執行后,發生交換。
參數傳遞只有上面三種,但是如果加上數組,就會產生幾種新形式。
首先,明確數組型變量名本身只是該數組所占存儲空間的首地址:
int a[3] = { 1, 2, 3 }; ? ?int *p = a; //等價于下行 ? ?//int *p = a[0];
printf("%d", *p);?
典型的數組做參數。
void fun(char s[]){ ? ?for (int i = 0; s[i] != '\0'; i++)
printf("%c", s[i]);
}void main()
{ ? ?char str[] = "Hello World!";
fun(str);
}
函數調用時,這里系統不會為形參分配數組存儲空間,而是僅僅分配一個存放數組地址(第一個元素地址)的存儲空間,此后,將實參數組的首地址傳遞給形參變量。
其實本質與下相同,只不過還是數組形式的(數組名代替指針)。
既然數組型變量名本身只是該數組所占存儲空間的首地址,我們當然可以用指針做形參來接收數組實參。
void fun(char *p){ ? ?while (*p)
{
printf("%c", *p);
p++;
}?
}void main()
{ ? ?char str[] = "Hello World!";
fun(str);
}
不過問題是如果這樣,無法把握數組結束(除非知道數組長度)。而對于字符數組(上例),由于字符串末尾有結束標志'\0'(ascii碼正好是0),所以就很容易利用指針來判斷字符串是否結束。
擴展資料:
調用帶參數的函數:
在調用函數時,可以向其傳遞值,這些值被稱為參數。
這些參數可以在函數中使用。
可以發送任意多的參數,由逗號 (,) 分隔:
myFunction(argument1,argument2)。
當聲明函數時,請把參數作為變量來聲明:
function myFunction(var1,var2){這里是要執行的代碼}。
變量和參數必須以一致的順序出現。第一個變量就是第一個被傳遞的參數的給定的值,以此類推。
按值傳遞參數:
按值傳遞參數時,是將實參變量的值復制一個到臨時存儲單元中,如果在調用過程中改變了形參的值,不會影響實參變量本身,即實參變量保持調用前的值不變。
按值傳遞參數時,需要在參數名前加"ByVal"關鍵字。
按地址傳遞參數:
按地址傳遞參數時,把實參變量的地址傳送給被調用過程,形參和實參共用內存的同一地址。在被調用過程中,形參的值一旦改變,相應實參的值也跟著改變。
如果實參是一個常數或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關鍵字。
按數組傳遞參數:
在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須采用地址傳遞的方式來傳遞參數。數組參數在傳遞時應注意以下兩個方面:
① 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括號不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔。
② 被調過程可分別通過Lbound和Ubound函數確定實參數組的下界和上界。
參考資料來源:百度百科-參數傳遞
參考資料來源:百度百科-字符串
網站欄目:c語言如何將字串傳入函數 c語言如何將字串傳入函數中
文章源于:http://m.newbst.com/article32/hjhosc.html
成都網站建設公司_創新互聯,為您提供微信公眾號、服務器托管、虛擬主機、網站收錄、動態網站、網站設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯