當前位置:首頁 » 編程語言 » c語言函數傳遞字元串
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言函數傳遞字元串

發布時間: 2022-09-27 13:04:22

『壹』 c語言字元串在函數間傳遞

#include<stdio.h>#include<string.h>char *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);
}

『貳』 C語言:編寫一個函數,由實參傳來一個字元串,統計此字元串中字母,數字,空格和其他字元的個數。

char *ch,就是定義一個字元型的指針,來接收指針,在你的程序里就是接收你輸入的字元串的首地址。要想返回實參,根據你的目的,應該是各類字元的個數,可以用一個數組實現。

int* sum(char *ch,int sum[4]);用一個長度為4的一維數組來統計各類字元的個數;

同樣int* 表示返回一個整形指針;
你應該這樣調用sum()函數;p=sum(ch,sum);(當然你之前要,在main()里定義一個整形指針接受sum()的返回值),把sum[4]={0}初始化全部為0,),用p[0],p[1],p[2],p[3]表示
字母,數字,空格和其他字元的個數。

不明白的再問我

『叄』 c語言中 如果給函數形參傳遞字元串

單個字元用單引號引起來,比如'\0'你都用了雙引號,改過來就好了

『肆』 C語言如何在兩個函數之間傳送字元串

用指針,例如:

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

void abc(char *str){
strcpy(str,"string from abc\0");
};

void def(char *str){
printf("print in def: %s\n",str);
};

main()
{
char str[30];
abc(&str[0]);
def(&str[0]);
exit(0);
}

// abc()中給值,def()印出。

『伍』 c語言:字元串做為函數參數傳遞

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 b=%d ", 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 b=%d ", 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] != ''; 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);

}

不過問題是如果這樣,無法把握數組結束(除非知道數組長度)。而對於字元數組(上例),由於字元串末尾有結束標志''(ascii碼正好是0),所以就很容易利用指針來判斷字元串是否結束。

(5)c語言函數傳遞字元串擴展閱讀:

調用帶參數的函數:

在調用函數時,可以向其傳遞值,這些值被稱為參數。

這些參數可以在函數中使用。

可以發送任意多的參數,由逗號 (,) 分隔:

myFunction(argument1,argument2)。

當聲明函數時,請把參數作為變數來聲明:

function myFunction(var1,var2){這里是要執行的代碼}。

變數和參數必須以一致的順序出現。第一個變數就是第一個被傳遞的參數的給定的值,以此類推。

按值傳遞參數:

按值傳遞參數時,是將實參變數的值復制一個到臨時存儲單元中,如果在調用過程中改變了形參的值,不會影響實參變數本身,即實參變數保持調用前的值不變。

按值傳遞參數時,需要在參數名前加"ByVal"關鍵字。

按地址傳遞參數:

按地址傳遞參數時,把實參變數的地址傳送給被調用過程,形參和實參共用內存的同一地址。在被調用過程中,形參的值一旦改變,相應實參的值也跟著改變。

如果實參是一個常數或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關鍵字。

按數組傳遞參數:

在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須採用地址傳遞的方式來傳遞參數。數組參數在傳遞時應注意以下兩個方面:

① 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括弧不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔。

② 被調過程可分別通過Lbound和Ubound函數確定實參數組的下界和上界。

參考資料來源:網路-參數傳遞

參考資料來源:網路-字元串



『陸』 如何用c語言編一個函數 實現字元串作參數傳遞,給個編譯過的程序

st 傳入子程序, st2 從子程序送回.
---------------------------
#include <stdio.h>
void show_st( char *st, char *st2){
printf("%s\n", st);
strcpy(st2,"new string !!");
}

void main()
{
char st[32]="This is string !";
char new_st[32];
show_st( &st[0], &new_st[0]);
printf("new string is: %s\n", new_st);
exit(0);
}

『柒』 C語言調用函數時,參數傳的是字元串,並沒有傳字元串指針,為什麼主函數中的值還是會變化

在c語言中,字元串是以字元數組的方式存儲的,而數組的本質就是指針;
因此,傳進去一個字元串,就是把它的地址傳去了。

『捌』 C語言 如何將一個字元串的內容傳遞給另一個字元串詳見內

#include<stdio.h>
#include<string.h>
structabc
{
charaaa[10];
}

intmain()
{
structabcmmm;
chartemp[10]="0903";
strcpy(mmm.aaa,temp);//C語言標准庫函數,將第二個參數的內容復制到第一個參數
return0;
}

『玖』 在c語言中 實現一個函數,傳遞一個字元數組,返回字元數組中的整數值,並在main函數中輸出。

#include<stdio.h>
#include<cstring>
intk=1000;
char*find(char*a)
{
//charb[k];
/*最好將b的定義形式寫成下面static的形式。常規定義會出現警告,而且可能會輸出異常
因為數組b會隨著函數結束而被釋放內存,強行返回則會出現內存溢出
定義成靜態形式,則數據不會因為函數結束而被釋放內存,但是靜態數組大小受到限制,
看你自己的實際情況選擇*/
staticcharb[50];
intj=0;
for(inti=0;i<strlen(a);i++)
{
if(a[i]>='0'&&a[i]<='9')
{
b[j]=a[i];
j++;
}
}
returnb;
}
intmain()
{
chara[k];

printf("請輸入字元串: ");

scanf("%s",&a);

char*c=find(a);

printf("字元串中數字有: ");

printf("%s ",c);
}

用返回值的形式來做數組問題確實不好,最好是用全局變數的形式做比較好。

有啥問題追問吧。