我需要将数字转换为字符串。我是经销商并向玩家分发卡片。套牌包含40张牌。四颗种子。
#include <stdio.h>
#include <conio.h>
#include <string.h>
char *convertNum(int a); //initialization function
void main(){
char *car=convertNum(30);
printf(" number to convert 30 : %s", car);
getch();
}
char *convertNum(int a){
char *seed, *value;
switch ((a-1)/10){
case 0: seed="C"; break;
case 1: seed="Q"; break;
case 2: seed="F"; break;
case 3: seed="P"; break;
default: seed="X"; break;
}
switch(a%10){
case 0: value="10"; break;
case 1: value="01"; break;
case 2: value="02"; break;
case 3: value="03"; break;
case 4: value="04"; break;
case 5: value="05"; break;
case 6: value="06"; break;
case 7: value="07"; break;
case 8: value="08"; break;
case 9: value="09"; break;
default: value="XX"; break;
}
strcat(value, seed); /* ERROR: I need to concatenate the strings value and seed, but this isn't the right way */
return value;
}
我可以做什么来连接字符串? value
和seed
是指针。
答案 0 :(得分:2)
1.指针*值和*种子未初始化。他们没有任何记录。你需要使用malloc()或calloc()和一些内存块初始化那些指针,然后它可以保存值。
希望这对你有用
答案 1 :(得分:0)
您将value
和seed
指向switch
语句中的字符串文字。您不能使用strcat()
修改字符串文字,因为它们存储在只读内存中。
您可以在convertNum()
功能中使用malloc()
来解决问题。但是,当您不再需要字符串时,请不要忘记拨打free()
。但是,您还可以提供从main()
函数到convertNum()
函数的静态分配字符数组。这在这里是有道理的,因为你的结果字符串总是有3个字符的固定长度:
void main(){
// Allocate an array of four characters and initialize it with zeros.
// You need 4 characters, because strings need to be zero terminated.
char car[4] = {0};
// Pass (a pointer to) the array to your covertNum() function.
convertNum(30, car);
printf(" number to convert 30 : %s", car);
getch();
}
然后您必须按如下方式修改convertNum()
函数:
void convertNum(int a, char* result){
char *seed, *value;
switch ((a-1)/10){
[...]
}
switch(a%10){
[...]
}
strcpy(result, value); // Copy 'value' to the beginning of the 'result' array.
strcat(result, seed); // Append 'seed' to 'value'; 'result' becomes zero-terminated.
}
这给出了以下输出:
转换为30:10F的数字
如果您希望输出为F10
,则必须在value
函数的最后两行中切换seed
和convertNum()
。
答案 2 :(得分:0)
在您的函数中,您将指针seed
和value
分配给switch
语句中的字符串文字,但是,您需要做的是为这两个指针分配内存,使用strcpy()
或其他标准库函数将字符串复制到它们,并在函数结束时连接。确保分配的内存足够大,以便将两个字符串与'\0'
字符一起保存。最后不要&# 39;完成后忘记释放已分配的内存。
#include <stdio.h>
#include <conio.h>
#include <string.h>
char *convertNum(int a);
void main(){
char *car=convertNum(30);
printf("number to convert 30 : %s\n", car);
free(car);
getch();
}
char *convertNum(int a){
char *seed = (char*)malloc(20*sizeof(char)), *value = (char*)malloc(20*sizeof(char));
switch ((a-1)/10){
case 0: strcpy(seed,"C"); break;
case 1: strcpy(seed,"Q"); break;
case 2: strcpy(seed,"F"); break;
case 3: strcpy(seed,"P"); break;
default: strcpy(seed,"X"); break;
}
switch(a%10){
case 0: strcpy(value,"10"); break;
case 1: strcpy(value,"01"); break;
case 2: strcpy(value,"02"); break;
case 3: strcpy(value,"03"); break;
case 4: strcpy(value,"04"); break;
case 5: strcpy(value,"05"); break;
case 6: strcpy(value,"06"); break;
case 7: strcpy(value,"07"); break;
case 8: strcpy(value,"08"); break;
case 9: strcpy(value,"09"); break;
default:strcpy(value,"XX"); break;
}
strcat(value, seed);
free(seed);
return value;
}