在开始之前,我想说这不是pro * c的问题。我已在下面测试过这个小程序,但它确实有效。
来源:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char string[100];
char str1[100];
sprintf(string, "á, é, í, ó, ú");
strcpy(str1, "Código_de_la_unidad");
printf("[%s]\n", string);
printf("[%s]\n", str1);
return 0;
}
输出:
rk248c:/opt/app/capm/users/rk248c/Rel1604_MX/src/batch/cycle> ./test
[á, é, í, ó, ú]
[Código_de_la_unidad]
现在我的问题在这里。 当我在另一个程序kc760.pc中使用相同的代码块时(这是一个非常大的程序,我不能在这里粘贴所有这些代码),它会在特殊字符的位置打印垃圾。
kc760.pc的来源(仅有用部分):
char out_record[100];
char tips_out_record[121];
int debug = 0;
char *countryLoc;
int main(int argc, char **argv)
{
/*==================================================================
// Local Variables Defined
==================================================================*/
char string[100];
char str1[100];
sprintf(string, "á, é, í, ó, ú");
strcpy(str1, "Código_de_la_unidad");
printf("[%s]\n", string);
printf("[%s]\n", str1);
char * line = NULL;
size_t len = 0;
ssize_t read;
FILE *sam = fopen("/opt/app/capm/users/rk248c/Rel1604_MX/src/batch/cycle/sample", "r");
while ((read = getline(&line, &len, sam)) != -1) {
printf("Retrieved line of length %zu :\n", read);
printf("%s", line);
}
exit(0);
int report_seq_counter;
int header_switch;
int rc;
countryLoc = getenv("LOCATION");
if(countryLoc == NULL){
printf("The env variable LOCATION is not set. Exiting !!\n");
exit(1);
}
kc760的输出:
请关注输出中的前两行。它们由于strcpy / sprintf操作而被打印。 打印垃圾。现在,请关注输出的最后四行,你会发现特殊的西班牙语字符被打印得很好(通过从文件中读取它们来实现)。
请查看该程序读取的文件内容:
rk248c:/opt/app/capm/users/rk248c/Rel1604_MX/src/batch/cycle> cat sample
[á, é, í, ó, ú]
[Código_de_la_unidad]
rk248c:/opt/app/capm/users/rk248c/Rel1604_MX/src/batch/cycle>
您能否帮我理解可能导致此问题的原因。 请注意,这个程序已经使用了近20年,这是我第一次在实现西班牙语字符时观察到这个问题。
如果我能提供更多信息,请与我们联系。