c - 将字符串数组作为字符指针传递
问题描述
我一直在尝试将字符串数组传递给函数。虽然我知道这样做的其他过程,但我特别想知道为什么这个特定代码不起作用
我尝试过以下方式
#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;
}
解决方案
这是发布的代码中的问题之一,here
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 */
}
这个循环什么时候结束?应该有一个循环终止条件,否则它将无限循环。
推荐阅读
- php - 需要总时间的空闲时间段
- c++ - 如何在 C++ 中仅访问 unordered_set 的元素?
- docker - Kubernetes podAffinity
- ios - 外部硬件指纹扫描仪和 iPhone 设备集成
- android - 在 Android 上的 OpenGL ES 1.0 上更快地绘制批次对象
- sql - 连接三个表,每个表都包含 where 子句
- angular - Angular mat-select 显示选项的数量
- mysql - 默认以降序加载 Datagrip 表
- android - 忘记WIFI网络不工作
- markdown - Markdown:引用另一个文件中的部分