1

Тема: [C] Допоможіть нубу

Привіт усім,вивчати програмування почав недавно,вирішив написати на С програмку,в яку коли користувач вставляє текст написаний на англійській розкладці клавіатурИ,переводить на українську
розкладку.Але оскільки я ще нуб покищо,то сам розібратись мені важко(було овер 100500 помилок і попереджень,зміг скоротити їх до 4х)Ось код:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>


char* setKey(char text[]);

int main()
{
    //int N=0;
    char inputTxt[100],*p=inputTxt;


    printf("Vvedit text:\n");

         scanf("%s",&p);
    if(!p){
               p=malloc(100);
       }
           if((strlen(p))==0){
           printf("You didnt entered text...\n");
               }

     setKey(inputTxt);
         printf("Translation:%s\n",inputTxt);


    getch();
    return 0;
}
char* setKey(char txt[])
{
    char latin[] = " qwertyuiop[]asdfghjklzxcvbnm,./QWERTYUIOP{}ASDFGHJKL:ZXCVBNM<>? ";
    char ukr[] = " ?????????????i??????????????????.?????????????I??????????????????,";
    char resultLetters[100],*pv=resultLetters;
    if(!resultLetters){
         pv=malloc(100*sizeof(char));
           }

    int i=0;
    int j=0;

    while(txt[i]!='\0'){
            if(txt[i]!= latin[j])
            j++;
            else{
            resultLetters[i]=ukr[j];
            i++; }
              }
    return resultLetters;
}

І ось помилки і попередження які видає:
[c++ Warning]Unit1.cpp(53):W8075 Suspicious pointer conversion
[C++ Error]Unit1.cpp(21):Cannot convert 'void*' to 'char*'
[C++ Error]Unit1.cpp(40):Cannot convert 'void*' to 'char*'
[c++ Warning]Unit1.cpp(54):W8004 'pv' is assigned a  value that is never used

2

Re: [C] Допоможіть нубу

0. На кожен malloc/calloc має бути free, інакше пам'ять тече. Звісно, коли програма завершується, пам'ять звільняється, тому тут це не страшно, але в цілому треба бути уважним.
1. Нумерація рядків у вас з'їхала, компілятор каже 53 - значить, в тексті 51.
2.

yomko1396 написав:

[c++ Warning]Unit1.cpp(53):W8075 Suspicious pointer conversion

ви повертаєте посилання на resultLetters, але це посилання на локальну змінну в функції, вона припинить існувати разом із return.
3,4.

yomko1396 написав:

[C++ Error]Unit1.cpp(21):Cannot convert 'void*' to 'char*'

malloc повертає нетипизоване посилання void *, його треба явно перетворити:
p=(char *)malloc(100);
5.

yomko1396 написав:

[c++ Warning]Unit1.cpp(54):W8004 'pv' is assigned a  value that is never used

Ви ніде не використовуєте значення pv. Нащо ви йому пам'ять виділяли?
6.

char inputTxt[100],*p=inputTxt;
...
if(!p){
p=malloc(100);
}

Безглуздий код. inputTxt ніколи не буде 0, тому if(!p) ніколи не виконається.
7. 

char resultLetters[100]
...
if(!resultLetters){

Ще безглуздіше, з тієї ж причини.
8. Ви ніде не занулюєте j. Один раз вона по рядку пробіжиться, а далі що?

Подякували: yomko13961