#include<stdio.h> char* zhuan(long long n) { char ss[19] = {0}; int num[17] = { 0 }, index = 16; while (n > 0) { if (index >= 6 && index <= 7) { index--; continue; } num[index] = n % 10; n /= 10; index--; } //printf("/nresult.index=%d\n",index); //printf num /*for (int i = 0; i < 17; i++) { printf("%d\n",num[i]); }*/ num[6] = 1; num[7] = 9; int num1[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char x[12] = { '1','0','X','9','8','7','6','5','4','3','2','\0'}; int sum = 0; for (int i = 0; i < 17; i++) { ss[i] = num[i] + '0'; sum += num[i] * num1[i]; } ss[17] = x[sum%11]; //printf("\nss=%s\n",ss); return ss; } int main() { long long n; //char ids[19]; scanf_s("%lld",&n); char *s=zhuan(n); printf("\n转换后的身份证号是%s",s); };该程序中,为什么最后的s打印出来是空的
时间: 2024-04-28 19:23:52 浏览: 56
该程序中最后的 s 打印出来是空的,是因为在函数 zhuan 中,ss 数组是一个局部变量,当函数执行完毕后,ss 数组就被销毁了,所以返回的指针指向了一个无效的地址,打印出来是空的。要想解决这个问题,可以将 ss 数组声明为 static 类型的,这样 ss 数组就不会被销毁,返回的指针就指向了一个有效的地址。同时,在 main 函数中,也需要将返回的指针赋值给一个 char 类型的数组,以便打印出转换后的身份证号。修改后的代码如下:
```c
#include<stdio.h>
char* zhuan(long long n) {
static char ss[19] = {0}; // 将 ss 数组声明为 static 类型的
int num[17] = { 0 }, index = 16;
while (n > 0)
{
if (index >= 6 && index <= 7)
{
index--;
continue;
}
num[index] = n % 10;
n /= 10;
index--;
}
num[6] = 1;
num[7] = 9;
int num1[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char x[12] = { '1','0','X','9','8','7','6','5','4','3','2','\0'};
int sum = 0;
for (int i = 0; i < 17; i++)
{
ss[i] = num[i] + '0';
sum += num[i] * num1[i];
}
ss[17] = x[sum%11];
return ss; // 返回指向 ss 数组的指针
}
int main() {
long long n;
char ids[19];
scanf_s("%lld",&n);
char *s=zhuan(n);
for (int i = 0; i < 18; i++) {
ids[i] = *(s + i); // 将返回的指针赋值给数组 ids
}
printf("\n转换后的身份证号是%s",ids);
return 0;
}
```
阅读全文