• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 23:35
CEST 05:35
KST 12:35
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
[ASL22] Ro8 Preview: In A Tizzy9[ASL22] Ro16 Preview: Holy Diver5[ASL22] Ro16 Preview: Rough Waters10[ASL22] Ro24 Preview: Siren's Call8[ASL22] Ro24 Preview: Summer's End9
Community News
Weekly Cups (Sep 13-20): herO scores triple1BSL Season 235Weekly Cups (Sep 7-12): SHIN, ByuN, MaxPax double down1StarCraft open world shooter announced at BlizzCon101Weekly Cups (Aug 30-Sep 7): herO thrives amid growing schism10
StarCraft 2
General
Balance hotfix patch 5.0.16b (July 16) Blizzard Classic Cup @ BlizzCon 2026 - $100k prize pool How do you feel about the StarCraft shooter announcement at BlizzCon 2026? The Death of Cheese: From a Professional Cheeser Weekly Cups (Sep 13-20): herO scores triple
Tourneys
Stellar Fest TWO the Moon (Dec 16-20) Sparkling Tuna Cup - Weekly Open Tournament 2026 GSTL Announcement RSL Revival: Season 6 - Qualifiers and Main Event RSL goes to London! 2026 Offline Finals Nov 21-22
Strategy
[H] ZvP Mid-Late Game: Stalkers Collossi HT
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
Mutation # 544 Double Trouble The PondCast: SC2 News & Results Mutation # 543 Enhanced Defenses Mutation # 542 The Ascended
Brood War
General
an AI researcher's take on the ladder bot BW General Discussion screpdb: new Starcraft reporting tool Bot on ladder [ASL22] Ro8 Preview: In A Tizzy
Tourneys
[ASL22] Ro8 Day 2 [ASL22] Ro16 Group D [ASL22] Ro8 Day 1 [IPSL] IPSL is Back With Winter 26-27!
Strategy
Cliff Jump Revisited (1 in a 1000 strategy) Replay Review Process - What do you do? Simple Questions, Simple Answers Odyssey Mineral Stack Saturation
Other Games
General Games
Diablo IV Nintendo Switch Thread Warcraft III: The Frozen Throne Stormgate/Frost Giant Megathread EVE Corporation
Dota 2
Dota 2 Champions League Season 3 Begins April 25! Official 'what is Dota anymore' discussion
League of Legends
[TL LoL EUW IHs] Teemo shall perish
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Community Thread
Community
General
Russo-Ukrainian War Thread US Politics Mega-thread Artificial Intelligence Thread Things Aren’t Peaceful in Palestine All you football fans (soccer)!
Fan Clubs
MarineLorD Fan Club The Creator Fan Club The ShoWTimE Fan Club
Media & Entertainment
Movie Discussion! [Manga] One Piece Diablo Animated Series on Netflix
Sports
Football (Soccer) Thread TeamLiquid Health and Fitness Initiative For 2023 MLB/Baseball 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
Recent Gifted Posts
Blogs
Gaming Intensity, Problemati…
TrAiDoS
38 yo Retired SWE loo…
PurE)Rabbit-SF
Can Bots Beat Pros?? Starcr…
namkraft
[meme] I finally understa…
LUCKY_NOOB
Regacy Esports:Our Goa…
regacyesports
Dreaming of BW patches (mod…
c3rberUs
Customize Sidebar...

Website Feedback

Closed Threads



Active: 8132 users

C Programming Practice

Blogs > CecilSunkure
Post a Reply
1 2 3 4 Next All
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
Last Edited: 2012-11-02 22:32:18
November 02 2012 22:26 GMT
#1
I have a couple friends of mine who are learning to program, and I've been helping to teach them about basic uses of pointers. For some reason writing out small practice C programs is really relaxing, so I made a few different small practice programs for my friends. There's some sort of task to achieve with a little framework code written to be used. I tried to write each practice program to focus on one small aspect of pointers or memory management. I want to share them with you guys, as they might help someone and it'd be fun to share solutions.

+ Show Spoiler [PointerPractice_1.c] +
#include <stdio.h> /* printf */

/* Prints a specific element within an array. */
void PrintElement( const int *array, const int element )
{
/* Place your code here */

/**/
/**/
/**/

/* array is a variable local to only this scope.
That means you can modify the pointer array, and change
where it points to. It starts by pointing to the first
element in the stackArray from main. */
printf( "%d", *array );
}

int main( void )
{
/* Create array on the stack. */
int stackArray[] = { 1, 3, 5, 6, 7, 9, 12, 15, 19, 21, 25 };
int arraySize = sizeof( stackArray ) / sizeof( stackArray[0] );

/* Do not modify below this. */
PrintElement( stackArray, 4 );

/* Correct output:
7 */

return 0;
}

+ Show Spoiler [PointerPractice_2.c] +
#include <stdio.h> /* printf */

/* Prints a specific element within an array. */
void PrintElement(const int element)
{
printf("%d, ", element);
}

/* Prints out contents of an entire array. */
/* MODIFY ONLY THIS FUNCTION. */
void PrintArray(const int *array, const int size)
{
int x;

for (x = 0; x < size; x++)
{
PrintElement(*array);
}
}

int main(void)
{
/* Create array on the stack. */
int stackArray[] = { 1, 3, 5, 6, 7, 9, 12, 15, 19, 21, 25 };
int arraySize = sizeof(stackArray) / sizeof(stackArray[0]);

PrintArray(stackArray, arraySize);

/* Correct output:
1, 3, 5, 6, 7, 9, 12, 15, 19, 21, 25, */

return 0;
}

+ Show Spoiler [PointerPractice_3.c] +
#include <stdio.h> /* printf */

/* Modify this function's signature. A function's signature is what the function
takes as parameters and returns as a value. For this you won't modify the
the return value. */
void SwapInts( int a, int b )
{
/* Place your code here. Modify these lines. */
int temp = a;
a = b;
b = temp;
}

/* Prints a specific element within an array. */
int main(void)
{
int a = 10;
int b = 6;

/* Modify this line. */
SwapInts( a, b );

printf("%d, %d", a, b );
/* Correct output:
6, 10 */

return 0;
}

+ Show Spoiler [PointerPractice_4.c] +
#include <stdio.h> /* printf */

/* Swap the contents of two pointers. Do not modify the prototype.
Use your function from PointerPractice_3 here. */
void SwapInt( )
{
}

/* Print contents of an array. Do not modify this function. */
void PrintArray( const int* array, const int size )
{
int i;
for(i = 0; i < size; ++i, ++array)
{
if(i != size - 1)
printf( "%d, ", *array);
else
printf( "%d\n", *array);
}
}

int main( void )
{
/* Create array on the stack. */
int stackArray[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

/* Get size of array. stackArray can be treated as pointer to first element. */
int arraySize = sizeof( stackArray ) / sizeof( *stackArray );

/* Can treat name of an array as pointer to first element. */
PrintArray( stackArray, arraySize );

/* Reverse the array here */
/**/
/**/
/**/

PrintArray( stackArray, arraySize );

/* Correct output:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 */

return 0;
}

+ Show Spoiler [PointerPractice_5.c] +
#include <stdio.h> /* printf */

/* Swap the contents of two pointers. Do not modify the prototype.
Use your function from PointerPractice_3 here. */
void SwapInt( )
{
}

/* Print contents of an array. Do not modify this function. */
void PrintArray( const int* array, const int size )
{
int i;
for(i = 0; i < size; ++i, ++array)
if(i != size - 1)
printf( "%d, ", *array);
else
printf( "%d\n", *array);
}

int main( void )
{
/* Create array on the stack. */
int stackArray[] = { 23, 13, 1, 3, 5, 0, 14, 23, 1, 30, 2 };

/* Get size of array. stackArray can be treated as pointer to first element. */
int arraySize = sizeof( stackArray ) / sizeof( *stackArray );

/* Can treat name of an array as pointer to first element. */
PrintArray( stackArray, arraySize );

/* Order the array here */

/**/
/**/
/**/

/* Do not modify below this. */
PrintArray( stackArray, arraySize );

/* Correct output:
23, 13, 1, 3, 5, 0, 14, 23, 1, 30, 2
0, 1, 1, 2, 3, 5, 13, 14, 23, 23, 30 */

return 0;
}

+ Show Spoiler [Concat.c] +
#include <stdio.h> // strlen and printf
#include <stdlib.h> // malloc and free

char *ConcatStrings( const char *str1, const char *str2 )
{
/* Place your code here */

/* Starts as a string pointer to the literal "EMPTY STRING". You'll need
to use malloc to create a character array and store
the pointer malloc returns within concatenated. */
char *concatenated = "EMPTY STRING";

/**/
/**/
/**/

return concatenated;
}

int main( void )
{
const char string1[] = "Concat with me to make ";
const char string2[] = "a conjoined sentence.";

char *concatenatedString = ConcatStrings( string1, string1 );

printf( "String after concatentation: %s", concatenatedString );

return 0;
}

+ Show Spoiler [WordSort.c] +
#include <stdio.h>  /* printf, scanf  */
#include <string.h> /* strlen, strcpy */
#include <stdlib.h> /* malloc, free */

/* Grow an array. */
void GrowArray( char ***array, int size, int *capacity )
{
int i; /* for looping */
int newCapacity = (*capacity) ? *capacity * 2 : 1;

/* Allocate memory twice the size of the previous capacity.
Allocate one if the capacity is zero. Don't forget to multiply
the capacity to allocate by the size of a char * in byes. */
char **temp = (char **)malloc( newCapacity * sizeof( char * ) );

printf( " CALLED: GrowArray : size %d; *capacity %d; new capacity %d\n", size, *capacity, newCapacity);

/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

/* Update capacity to reflect size of the temp's allocation. */
*capacity = newCapacity;

/* Free the old array. */
if(*array)
free( *array );

/* Make the array point to the location we allocated. */
*array = temp;
}

/* Dynamically allocate a string, copy the contents of toCopy into it,
and then return the dynamically allocated string. */
char *CopyString( const char *toCopy )
{
char *temp = (char *)malloc( strlen( toCopy + 1 ) * sizeof( char ) );
strcpy( temp, toCopy );
return temp;
}

/* Print out a char array. */
void PrintCharArray( const char **array, int length )
{
int i;
printf( " PrintCharArray( ):\n" );
for(i = 0; i < length; ++i)
printf( " -%s\n", array[i] );
}

int main( void )
{
/* Create a pointer to character pointer with address initialized to zero. */
char **words = { 0 };
int size = 0;
int capacity = 0;
int i; /* for looping */

/* Use this to gather input. No words over length of twenty.
Initialize array to zero. */
char input[21] = { 0 };

printf( "Please enter strings followed by enter. Hit enter without a string to"
" end the program.\n" );

/* Infinite loop. */
for(;;)
{
printf( " " );
/* Get input string. */
gets( input );

/* Only add it to the array if user didn't just hit enter without
inputting a string. */
if(*input != '\0')
{
++size;

/* Grow array if we need more space. */
if(size > capacity)
GrowArray( &words, size, &capacity );

/* Copy our input string into the words array. */
words[size - 1] = CopyString( input );
}

/* While a string with '\0' (user presses enter)
in front is not found. */
else
break;
}

/* SORT THE ARRAY OF WORDS HERE IN ALPHABETICAL ORDER */
/**/
/**/
/**/

PrintCharArray( (const char**)words, size );

free( words );

return 0;
}


They should be written from easiest to hardest. I don't have solutions for all of them, but I can write one in if anyone needs to see a solution. Anyways, feel free to post up your solutions it'd be fun to share them. Also feel free to ask questions

Look for this thing to see where you code is intended to go:
/* Place your code here */
/**/
/**/
/**/


As for the next practice program I think I'll be doing something with function pointers. The last program is mimicking a C++ vector with a few loose variables, but making it into an object with structs + function pointers would be cool. Jump tables and vtables are pretty sweet and it'd be fun to mess around with them.

***
thedeadhaji *
Profile Blog Joined January 2006
39489 Posts
November 03 2012 00:22 GMT
#2
For some reason writing out small practice C programs is really relaxing


I know what you mean. I received a new tail light for my bike today, and I was going through the various modes of the device, I caught myself thinking, "man, programming the MCU to do this would be pretty fun" (fun b/c it's simple and readily rewarding)

ragnorr
Profile Joined April 2011
Denmark6097 Posts
Last Edited: 2012-11-03 01:48:22
November 03 2012 01:45 GMT
#3
i really despise coding stuff in C, but in general i preffer functional programming. most of these assignments seem fairly suited for people who havent done C tho
uberMatt
Profile Joined May 2004
Canada659 Posts
November 03 2012 02:00 GMT
#4
!dontcastmalloc

'const' in c and c++ are fundamentally different, you might want to look up the difference before writing a c tutorial
Khalum
Profile Joined September 2010
Austria831 Posts
November 03 2012 02:02 GMT
#5
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?
phar
Profile Joined August 2011
United States1080 Posts
November 03 2012 02:07 GMT
#6
On November 03 2012 11:00 uberMatt wrote:
!dontcastmalloc

'const' in c and c++ are fundamentally different, you might want to look up the difference before writing a c tutorial

Yes

http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc

But for the purposes of a teaching a first year some basic pointer stuff, it's probably ok to include ugly hack code in the parts they're not even going to be modifying.
Who after all is today speaking about the destruction of the Armenians?
uberMatt
Profile Joined May 2004
Canada659 Posts
November 03 2012 02:12 GMT
#7
On November 03 2012 11:02 Khalum wrote:
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?


well, it's especially nonsensical since the c standard defines that no action is taken if free receives a null pointer.
Khalum
Profile Joined September 2010
Austria831 Posts
Last Edited: 2012-11-03 02:16:55
November 03 2012 02:16 GMT
#8
On November 03 2012 11:12 uberMatt wrote:
Show nested quote +
On November 03 2012 11:02 Khalum wrote:
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?


well, it's especially nonsensical since the c standard defines that no action is taken if free receives a null pointer.


True!

[edit] my excuse: it's past 3am
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
Last Edited: 2012-11-03 02:36:39
November 03 2012 02:27 GMT
#9
On November 03 2012 11:02 Khalum wrote:
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?

The for loop doesn't run if the pointer is null. As for not passing null to free, I was just being explicit with how the flow of the function works.

On November 03 2012 11:00 uberMatt wrote:
!dontcastmalloc

'const' in c and c++ are fundamentally different, you might want to look up the difference before writing a c tutorial

Casting the pointer is something I've been taught to do. It's a pretty minor detail that really comes down to personal preference.
Khalum
Profile Joined September 2010
Austria831 Posts
November 03 2012 02:44 GMT
#10
On November 03 2012 11:27 CecilSunkure wrote:
[..]
The for loop doesn't run if the pointer is null. As for not passing null to free, I was just being explicit with how the flow of the function works.
[..]


What prevents me from doing this?


[..]
char **array= 0;
int capacity = 0;
GrowArray( &array, 10, &capacity );
[..]
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
November 03 2012 02:48 GMT
#11
On November 03 2012 11:44 Khalum wrote:
Show nested quote +
On November 03 2012 11:27 CecilSunkure wrote:
[..]
The for loop doesn't run if the pointer is null. As for not passing null to free, I was just being explicit with how the flow of the function works.
[..]


What prevents me from doing this?


[..]
char **array= 0;
int capacity = 0;
GrowArray( &array, 10, &capacity );
[..]

Right but it's assumed you don't modify the existing code unless told to. In the op I was talking about putting that stuff into a nice object making use of function pointers as an exercise.
uberMatt
Profile Joined May 2004
Canada659 Posts
November 03 2012 03:02 GMT
#12
On November 03 2012 11:27 CecilSunkure wrote:
Show nested quote +
On November 03 2012 11:02 Khalum wrote:
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?

The for loop doesn't run if the pointer is null. As for not passing null to free, I was just being explicit with how the flow of the function works.

Show nested quote +
On November 03 2012 11:00 uberMatt wrote:
!dontcastmalloc

'const' in c and c++ are fundamentally different, you might want to look up the difference before writing a c tutorial

Casting the pointer is something I've been taught to do. It's a pretty minor detail that really comes down to personal preference.


yeah, i understand. but i think that someone new to c might reasonably conclude that function arguments should be cast with the const keyword due to the code examples, not realizing that they are superfluous. i think that the first few tutorials that people do when they start programming or learning a new language have a large effect on their future thought process when writing programs, so it is important to make sure that everything is logical and does not give the wrong impression.
CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
Last Edited: 2012-11-03 03:18:12
November 03 2012 03:15 GMT
#13
On November 03 2012 12:02 uberMatt wrote:
Show nested quote +
On November 03 2012 11:27 CecilSunkure wrote:
On November 03 2012 11:02 Khalum wrote:
This part in wordsort.c confuses me:

[...]
/* Copy contents into temp. */
for(i = 0; i < size - 1; ++i)
{
temp[i] = (*array)[i];
}

[...]

/* Free the old array. */
if(*array)
free( *array );
[...]


The if(*array) is basically nonsense as the for loop would have crashed anyways if the array was a null pointer..?

The for loop doesn't run if the pointer is null. As for not passing null to free, I was just being explicit with how the flow of the function works.

On November 03 2012 11:00 uberMatt wrote:
!dontcastmalloc

'const' in c and c++ are fundamentally different, you might want to look up the difference before writing a c tutorial

Casting the pointer is something I've been taught to do. It's a pretty minor detail that really comes down to personal preference.

yeah, i understand. but i think that someone new to c might reasonably conclude that function arguments should be cast with the const keyword due to the code examples, not realizing that they are superfluous. i think that the first few tutorials that people do when they start programming or learning a new language have a large effect on their future thought process when writing programs, so it is important to make sure that everything is logical and does not give the wrong impression.

Ah yeah, if you want you can modify it and post it up. I can take a look a probably swap it out.
Fission
Profile Blog Joined August 2010
Canada1184 Posts
November 03 2012 03:29 GMT
#14
By the time I get done programming all day at work I am too burned out to do any personal exploration of CS related things
rabidch
Profile Joined January 2010
United States20289 Posts
November 03 2012 03:58 GMT
#15
On November 03 2012 10:45 ragnorr wrote:
i really despise coding stuff in C, but in general i preffer functional programming. most of these assignments seem fairly suited for people who havent done C tho

woo yeah functional programming!

i like C sometimes though
LiquidDota StaffOnly a true king can play the King.
snakeeyez
Profile Joined May 2011
United States1231 Posts
Last Edited: 2012-11-03 06:32:59
November 03 2012 06:32 GMT
#16
Yeah same here when you program most of the day its a little harder to sit down and program just for fun. I cant look at code outside of work really anymore. Its just too much time looking at a computer really and sitting down. It is fun though if its just a hobby kind of thing for school.
mmp
Profile Blog Joined April 2009
United States2130 Posts
November 03 2012 07:30 GMT
#17

int a[1];
int b[1][1];
int *c;
int **d;
int *e[];
int *f[0];


Okay for 100 points each, what happens at each line (what value is stored, or what error is produced)?


*a = 5;
b = &a;
*c = 5;
d = f;
e[0] = c;
f = d;
I (λ (foo) (and (<3 foo) ( T_T foo) (RAGE foo) )) Starcraft
]343[
Profile Blog Joined May 2008
United States10328 Posts
November 03 2012 09:17 GMT
#18
lol, initially for #3 I did
+ Show Spoiler +


void swapInt(int *a, int *b) {
int temp = *a;
a = b;
b = &temp;
}


but of course that didn't work for #4 (since it doesn't actually swap the contents of the pointers... though I don't think #3 made that clear.)

Also wtf in-place n log n sorting algorithms are way harder than expected [except heapsort I guess...]
Writer
Lysenko
Profile Blog Joined April 2010
Iceland2128 Posts
November 03 2012 09:37 GMT
#19
On November 03 2012 11:27 CecilSunkure wrote:
Casting the pointer is something I've been taught to do. It's a pretty minor detail that really comes down to personal preference.


It's awesome if your compiler predates the 1989 ANSI C standard, where an entire type was invented to avoid having that cast in there.
http://en.wikipedia.org/wiki/Lysenkoism
ragnorr
Profile Joined April 2011
Denmark6097 Posts
Last Edited: 2012-11-03 11:28:27
November 03 2012 11:28 GMT
#20
On November 03 2012 18:17 ]343[ wrote:
lol, initially for #3 I did
+ Show Spoiler +


void swapInt(int *a, int *b) {
int temp = *a;
a = b;
b = &temp;
}


but of course that didn't work for #4 (since it doesn't actually swap the contents of the pointers... though I don't think #3 made that clear.)

Also wtf in-place n log n sorting algorithms are way harder than expected [except heapsort I guess...]

You aint exchanging the value the pointer points to. It should look like this
+ Show Spoiler +

void swapInt(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
1 2 3 4 Next All
Please log in or register to reply.
Live Events Refresh
PiGosaur Cup
00:00
#100
PiGStarcraft730
SteadfastSC102
CranKy Ducklings84
davetesta19
Liquipedia
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
PiGStarcraft730
SteadfastSC 102
-ZergGirl 61
Nina 7
StarCraft: Brood War
Britney 7777
Rain 1970
GuemChi 1345
Dewaltoss 213
Hyun 77
yabsab 3
Dota 2
monkeys_forever519
LuMiX1
League of Legends
JimRising 838
Counter-Strike
taco 509
Super Smash Bros
hungrybox641
Other Games
summit1g11457
Coldzera 780
C9.Mang0311
Livibee228
Maynarde156
ViBE142
Sick140
Organizations
Other Games
gamesdonequick651
[ Show 15 non-featured ]
StarCraft 2
• Hupsaiya 81
• EnkiAlexander 64
• CranKy Ducklings SOOP44
• mYiSmile112
• Letter147
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• Pr0nogo 4
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Stunt280
Upcoming Events
Kung Fu Cup
7h 25m
The PondCast
1d 6h
Replay Cast
1d 20h
Korean StarCraft League
2 days
CranKy Ducklings
3 days
GSL
4 days
Yamato Cup
4 days
Replay Cast
4 days
Afreeca Starleague
5 days
WardiTV Weekly
5 days
[ Show More ]
Sparkling Tuna Cup
6 days
Afreeca Starleague
6 days
PiGosaur Cup
6 days
Liquipedia Results

Completed

Super Anchor Qualifying S3
Blizzard Classic Cup 2026
Big Dog Cup 2026 Div 1

Ongoing

ASL Season 22
CSL 2026 AUTUMN (S22)
Acropolis #5
Acropolis #5 - GSA
Calamity Invitational
Logitech G Play Connect 2026
SL StarSeries Fall 2026
FISSURE Playground #3
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026

Upcoming

Acropolis #5 - GSB
Acropolis #5 - GSC
BSL Season 23
SC4ALL II: Brood War
BSL 23: Non-Korean Championship
HSC XXX
Stellar Fest 2: Lunar Cup
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Offline Finals
Custodian Cup
Copium Cup
PGL Major Singapore 2026
Stake Ranked Episode 6
BLAST Rivals Fall 2026
IEM Beijing 2026
Stake Ranked Episode 5
PGL Masters Bucharest 2026
1win Private Club #2
Thunderpick World Champ. '26
ESL Pro League Season 24
Stake Ranked Episode 4
1win Private Club #1
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.