[英]Passing array of strings as character pointers
我一直在嘗試將字符串數組傳遞給函數。 盡管我知道執行此操作的其他過程,但我特別想確切地知道為什么此特定代碼不起作用
我已經嘗試過以下方式
#include<stdio.h>
void check_number(char* str[])
{
int sum=0;
int i=0;
while(str[0][i]!='/0')
{
char a='a';
sum=sum+str[0][i]-(int)(a);
}
printf("number = %d ",sum);
}
int main()
{
char* str[2];
printf("Enter a string ");
scanf("%s",str[0]);
printf("Enter a string ");
scanf("%s",str[1]);
check_number(str);
return 0;
}
這是已發布代碼中的問題之一,在這里
char* str[2];
str
是兩個字符指針組成的數組,即str[0]
和str[1]
是字符指針,即它們需要使用有效地址進行初始化,但尚未為其分配內存。
scanf("%s",str[0]); /* No memory allocated for str[0] */
scanf("%s",str[1]); /* No memory allocated for str[1] */
在將數據掃描到str[0]
和str[1]
之前,需要為其分配內存。 例如
int main(void)
{
char* str[2];
for(int i = 0; i < 2 ; i++) {
printf("Enter a string ");
str[i] = malloc(MAX_BUF_SIZE); /*define this macro for no of bytes */
scanf("%s",str[i]);
}
/* do some stuff */
/* free dynamically allocated memory for each str[index] */
return 0;
}
另一個問題在這里
while(str[0][i]!='\0') { /* '/0' --> '\0' */
char a='a';
sum=sum+str[0][i]-(int)(a); /* what you want to achieve here, please explain */
}
該循環何時終止? 應該有一個循環終止條件,否則它將無限循環。
這行:
char* str[2];
聲明一個數組,該數組包含2個指向char
的指針,但是指針不指向有效內存。 您需要在某處保留/分配一些空間。
一種可能的解決方案是在堆棧中僅具有兩個獨立的緩沖區:
const size_t bufferSize = 100;
char str1[bufferSize];
char str2[bufferSize];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.