pro * c:在尝试从特定程序打印西班牙语字符时打印垃圾

时间:2016-07-26 23:37:33

标签: c linux

在开始之前,我想说这不是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的输出:

enter image description here

请关注输出中的前两行。它们由于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年,这是我第一次在实现西班牙语字符时观察到这个问题。

如果我能提供更多信息,请与我们联系。

0 个答案:

没有答案