Kodumdaki hata nedir?

nolonger

Hectopat
Katılım
27 Şubat 2021
Mesajlar
153
Bu kodumda ben shell_buffer verisinden argümanları ayırmayı ve ; gelince yeni komuta geçmesini istiyorum fakat şuan sadece ilk komutu alıyor.
Sizce nerde hata yaptım?

[CODE lang="c" title="Kod"]#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
char *c(char *s){
char *comm = strtok(s, " ");
strtok(s, comm);
return s;
};
int main()
{

char shell_buffer[] = "echo naber;echo iyi";
char *token = strtok(shell_buffer, ";");
while( token != '\0' ) {
printf(c(token));
token = strtok('\0', ";");
}

}
[/CODE]
 
Son düzenleyen: Moderatör:
C++:
#define _CRT_SECURE_NO_WARNINGS

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

using namespace std;

int main()
{
    char* token;
    char shell_buffer[] = "echo naber;echo iyi";

    token = strtok(shell_buffer, ";");

    while (token != NULL)
    {
        printf("%s\n", token);
        token = strtok(NULL, ";");
    }
    return 0;
}
 
İstediğim tam olarak bu değil. Öbür kodumda argümanları da ayırıyordum bunda da ayırmam gerekiyor.

 
Tam olarak anlayamadım, diğer kodunuz ile mi ayırma işlemi yapıp ekrana yazdırmak istiyorsunuz?
 
Yine anlamadım
Ekrana böyle mi yazdırmak istiyorsunuz:



Yoksa böyle mi?

 
C++:
#define _CRT_SECURE_NO_WARNINGS

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

using namespace std;

char* c(char* metin, int baslangic, int uzunluk)
{
    char* icerik = new char[uzunluk + 1];
    for (int i = 0; i < uzunluk; i++)
    {
        icerik[i] = *(metin + baslangic + i);
    }
    icerik[uzunluk] = 0;
    return icerik;
}

int main()
{
    char* token;
    char shell_buffer[] = "echo naber;echo iyi";

    token = strtok(shell_buffer, ";");

    while (token != NULL)
    {
        printf("%s\n", c(token, 0, 4));
        token = strtok(NULL, ";");
    }
    return 0;
}
 
Uzunluk belirtmeden yapılamaz mı?
 
Uzunluk belirtmeden yapılamaz mı?

C++:
#define _CRT_SECURE_NO_WARNINGS

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

using namespace std;

char* c(char* metin)
{
    int index = 0;
    char* icerik = new char[4 + 1];
    for (int i = 0; i != strlen(metin); i++)
    {
        if (metin[i] == ' ')
        {
            index = i;
            break;
        }
        icerik[i] = metin[i];
    }
    icerik[index] = 0;
    return icerik;
}

int main()
{
    char* token;
    char shell_buffer[] = "echo naber;echo iyi";

    token = strtok(shell_buffer, ";");

    while (token != NULL)
    {
        printf("%s\n", c(token));
        token = strtok(NULL, ";");
    }
    return 0;
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…