2014-02-21 58 views
0

以下代码是C项目的一部分。该项目有一个头文件,其中定义并声明了两个结构体。 即时消息德语,所以我的文本是,但那只是输出和变量的名称。 我的问题是:在大小写字符串必须写入一个字符数组。它给了我错误“无法将char *转换为char”。我在那里放箭。 我试图通过使用gets,put或类似的东西来解决这个问题,而且我也无法在互联网上找到帮助的答案。 也许你可以帮我吗?C编译器在将字符串分配给字符数组时,称“无法将char *转换为char”

#if !defined(krftst_cpp) 
#define krftst_cpp 
#include "typ1.h" 

krftst() 
{ 
int antww; 
FILE *datei; 

    if((datei = fopen("datei.dat", "r+b")) == NULL) 
{ 
    fprintf(stderr, "Konnte Datei nicht öffnen"); 
    return 1; 
} 

printf(" Folgende Kraftstoffe stehen zur Wahl:\n"); 
printf("  -1 Super\n"); 
printf("  -2 E10\n"); 
printf("  -3 Diesel\n"); 
printf("  -4 Biodiesel\n"); 
printf("  -5 Gas\n\n"); 
printf(" Sollten sie ein Elektroauto fahren, geben sie bitte 6 ein.\n"); 
printf(" Bei einem Hybridauto normal den Kraftstoff angeben.\n); 
scanf("%d",&antww); 

switch(antww) 
{ 
    case 1: 
     Werte.krftst[20]= "Super"; <-- 
     break; 

    case 2: 
     Werte.krftst[20]= "E10"; <-- 
     break; 

    case 3: 
     Werte.krftst[20]= "Diesel"; <-- 
     break; 

    case 4: 
     Werte.krftst[20]= "Biodiesel"; <-- 
     break; 

    case 5: 
     Werte.krftst[20]= "Gas"; <-- 
     break; 

    case 6: 
     Werte.krftst[20]="Elektro"; <-- 
     printf("Geben sie bei Kraftstoffverbrauch statt 'l' 'W' ein, um in Wattt zu rechnen."); 
     break; 

    default: 
    printf("Bitte geben sie nur die Zahlen 1 bis 6 ein!"); 

} 

} 

#endif 

werte的声明:

struct Daten { 
    char start[20]; 
    char ziel[20]; 
    int km; 
    int vrbr; 
    char dnstf; 
    char name[30]; 
    char knzchn[10]; 
    char krftst[20]; 
    char einh; 
    char dtm[12]; 
}; 
+2

你在哪里定义'Werte'?更具体地说,“Werte.krftst”的类型是什么? –

+0

Werte.krftst [20]将存储一个字符,但通过使用Werte.krftst [20] =“Super”,您正在指定一个指针。 – Rahul

+0

什么是'Werte.krftst'?你想使用'strncpy'吗? – HAL

回答

1

如果你想在字符串存储在数组中的delaration后的数组,使用strcpy函数的stirng复制阵列。

Werte.krftst[20]= "Super" 

应该是

strcpy(Werte.krftst,"supper"); 
+0

这是“typ1.h”文件: – Chakkoty

+0

检查你的文件typ1.h.什么是krftst? – Rahul

+0

#if!defined(typ1_h) #define typ1_h struct Daten { char start [20]; char ziel [20]; int km; int vrbr; char dnstf; char name [30]; char knzchn [10]; char krftst [20]; char einh; char dtm [12]; }; struct Rechn { float vrbrPRO; float vrbrG; float kmG; float vrbrEinz; float vrbrPROG; }; struct Rechn Ergebn; struct Daten Werte; extern char Dtpfad; int控制; #endif dam *我会在回答中写下这个 – Chakkoty

1

字符数组可以由串仅在声明的点文字进行初始化。

这工作:

char foo[50] = "bar"; 

这(你有效地做)不工作:

char foo[50]; 
foo[50] = "bar"; 

其实,这是错误的几种方式,而不是其中最重要的是非法内存访问foo的不存在的第51个元素...

您需要做的是为串,无论是在声明的时候...

char text[50]; 

...或...动态

char * text; 
// ... 
text = malloc(50); 
if (text == NULL) 
{ 
    // error handling 
} 

...然后使用strcpy()或类似副本串入预留空间。

strcpy(text, "some message"); 
2

您可以在初始化过程中的字符串赋值给一个数组,但在那之后,你应该使用strcpy到“指定”的字符串。

char x[50] = "hello"; // Initializtaion. 

x = "goodbye";  // Not ok. Compile error 
x[0] = "goodbye"; // Not ok. Compile error 

strcpy(x, "goodbye");  // OK 
strcpy(&x[10], "goodbye"); // OK, goodbye\0 will be placed 10 characters into x. 

你应该使用:

strcpy(Werte.krftst, "Super"); 

如果使用strcpy你应该

#include <string.h>